// export def_base_level , def_amount_of_people , def_skill_level , def_starting_resources , def_shipments_density , def_shared_vision , def_people_respawning ; export def_amount_of_apemen ; export is_depot , number_of_breastworks , number_of_people , skill_level , starting_crates , starting_resources , shipments_density , morale_decreasing_time , amount_of_apemen , amount_of_siberit , respawning_time_min , respawning_time_max ; export Side_Teams , Teams ; export Side_Positions , Side_Nations , Team_Game ; export Position_Sides ; export depot_def , breastworks_def , start_def , normal_oil_deposits_locations , extra_oil_deposits_locations , normal_sib_deposits_locations , extra_sib_deposits_locations , battle_flags_id , cSides ; export SibContaminated ; var commander ; var global_units , global_defined , soldiers_created ; var neng , nsci , nmech , nsol ; function read_multiplayer_and_game_parameters ; var i ; begin
   0: LD_INT 0
   2: PPUSH
   3: PPUSH
// if Multiplayer then
   4: LD_OWVAR 4
   8: IFFALSE 62
// begin Your_Side := mp_player_side ;
  10: LD_ADDR_OWVAR 2
  14: PUSH
  15: LD_OWVAR 7
  19: ST_TO_ADDR
// Side_Positions := mp_sides_positions ;
  20: LD_ADDR_EXP 23
  24: PUSH
  25: LD_OWVAR 17
  29: ST_TO_ADDR
// Side_Teams := mp_sides_teams ;
  30: LD_ADDR_EXP 21
  34: PUSH
  35: LD_OWVAR 15
  39: ST_TO_ADDR
// Side_Nations := mp_sides_nations ;
  40: LD_ADDR_EXP 24
  44: PUSH
  45: LD_OWVAR 16
  49: ST_TO_ADDR
// Teams := mp_teams ;
  50: LD_ADDR_EXP 22
  54: PUSH
  55: LD_OWVAR 12
  59: ST_TO_ADDR
// end else
  60: GO 236
// begin Your_Side := 1 ;
  62: LD_ADDR_OWVAR 2
  66: PUSH
  67: LD_INT 1
  69: ST_TO_ADDR
// Side_Positions := [ 1 , 2 , 3 , 4 , 5 , 0 , 0 , 0 ] ;
  70: LD_ADDR_EXP 23
  74: PUSH
  75: LD_INT 1
  77: PUSH
  78: LD_INT 2
  80: PUSH
  81: LD_INT 3
  83: PUSH
  84: LD_INT 4
  86: PUSH
  87: LD_INT 5
  89: PUSH
  90: LD_INT 0
  92: PUSH
  93: LD_INT 0
  95: PUSH
  96: LD_INT 0
  98: PUSH
  99: EMPTY
 100: LIST
 101: LIST
 102: LIST
 103: LIST
 104: LIST
 105: LIST
 106: LIST
 107: LIST
 108: ST_TO_ADDR
// Side_Teams := [ 1 , 2 , 3 , 4 , 5 , 0 , 0 , 0 ] ;
 109: LD_ADDR_EXP 21
 113: PUSH
 114: LD_INT 1
 116: PUSH
 117: LD_INT 2
 119: PUSH
 120: LD_INT 3
 122: PUSH
 123: LD_INT 4
 125: PUSH
 126: LD_INT 5
 128: PUSH
 129: LD_INT 0
 131: PUSH
 132: LD_INT 0
 134: PUSH
 135: LD_INT 0
 137: PUSH
 138: EMPTY
 139: LIST
 140: LIST
 141: LIST
 142: LIST
 143: LIST
 144: LIST
 145: LIST
 146: LIST
 147: ST_TO_ADDR
// Side_Nations := [ 1 , 1 , 3 , 3 , 2 , 3 , 0 , 0 ] ;
 148: LD_ADDR_EXP 24
 152: PUSH
 153: LD_INT 1
 155: PUSH
 156: LD_INT 1
 158: PUSH
 159: LD_INT 3
 161: PUSH
 162: LD_INT 3
 164: PUSH
 165: LD_INT 2
 167: PUSH
 168: LD_INT 3
 170: PUSH
 171: LD_INT 0
 173: PUSH
 174: LD_INT 0
 176: PUSH
 177: EMPTY
 178: LIST
 179: LIST
 180: LIST
 181: LIST
 182: LIST
 183: LIST
 184: LIST
 185: LIST
 186: ST_TO_ADDR
// Teams := [ [ 1 ] , [ 2 ] , [ 3 ] , [ 4 ] , [ 5 ] , [ 6 ] ] ;
 187: LD_ADDR_EXP 22
 191: PUSH
 192: LD_INT 1
 194: PUSH
 195: EMPTY
 196: LIST
 197: PUSH
 198: LD_INT 2
 200: PUSH
 201: EMPTY
 202: LIST
 203: PUSH
 204: LD_INT 3
 206: PUSH
 207: EMPTY
 208: LIST
 209: PUSH
 210: LD_INT 4
 212: PUSH
 213: EMPTY
 214: LIST
 215: PUSH
 216: LD_INT 5
 218: PUSH
 219: EMPTY
 220: LIST
 221: PUSH
 222: LD_INT 6
 224: PUSH
 225: EMPTY
 226: LIST
 227: PUSH
 228: EMPTY
 229: LIST
 230: LIST
 231: LIST
 232: LIST
 233: LIST
 234: LIST
 235: ST_TO_ADDR
// end ; for i := 1 to 8 do
 236: LD_ADDR_VAR 0 2
 240: PUSH
 241: DOUBLE
 242: LD_INT 1
 244: DEC
 245: ST_TO_ADDR
 246: LD_INT 8
 248: PUSH
 249: FOR_TO
 250: IFFALSE 288
// if Multiplayer_GetPlayerIsSpec ( i ) then
 252: LD_VAR 0 2
 256: PPUSH
 257: CALL_OW 530
 261: IFFALSE 286
// Side_Positions := Replace ( Side_Positions , i , 0 ) ;
 263: LD_ADDR_EXP 23
 267: PUSH
 268: LD_EXP 23
 272: PPUSH
 273: LD_VAR 0 2
 277: PPUSH
 278: LD_INT 0
 280: PPUSH
 281: CALL_OW 1
 285: ST_TO_ADDR
 286: GO 249
 288: POP
 289: POP
// Position_Sides := [ 0 , 0 , 0 , 0 , 0 , 0 ] ;
 290: LD_ADDR_EXP 26
 294: PUSH
 295: LD_INT 0
 297: PUSH
 298: LD_INT 0
 300: PUSH
 301: LD_INT 0
 303: PUSH
 304: LD_INT 0
 306: PUSH
 307: LD_INT 0
 309: PUSH
 310: LD_INT 0
 312: PUSH
 313: EMPTY
 314: LIST
 315: LIST
 316: LIST
 317: LIST
 318: LIST
 319: LIST
 320: ST_TO_ADDR
// for i := 1 to 8 do
 321: LD_ADDR_VAR 0 2
 325: PUSH
 326: DOUBLE
 327: LD_INT 1
 329: DEC
 330: ST_TO_ADDR
 331: LD_INT 8
 333: PUSH
 334: FOR_TO
 335: IFFALSE 382
// if Side_Positions [ i ] then
 337: LD_EXP 23
 341: PUSH
 342: LD_VAR 0 2
 346: ARRAY
 347: IFFALSE 380
// Position_Sides := Replace ( Position_Sides , Side_Positions [ i ] , i ) ;
 349: LD_ADDR_EXP 26
 353: PUSH
 354: LD_EXP 26
 358: PPUSH
 359: LD_EXP 23
 363: PUSH
 364: LD_VAR 0 2
 368: ARRAY
 369: PPUSH
 370: LD_VAR 0 2
 374: PPUSH
 375: CALL_OW 1
 379: ST_TO_ADDR
 380: GO 334
 382: POP
 383: POP
// Team_Game := Side_Teams [ your_side ] ;
 384: LD_ADDR_EXP 25
 388: PUSH
 389: LD_EXP 21
 393: PUSH
 394: LD_OWVAR 2
 398: ARRAY
 399: ST_TO_ADDR
// cSides := Side_Positions ;
 400: LD_ADDR_EXP 35
 404: PUSH
 405: LD_EXP 23
 409: ST_TO_ADDR
// if Multiplayer then
 410: LD_OWVAR 4
 414: IFFALSE 522
// begin def_base_level := GetMultiplayerSetting ( 0 ) ;
 416: LD_ADDR_EXP 1
 420: PUSH
 421: LD_INT 0
 423: PPUSH
 424: CALL_OW 426
 428: ST_TO_ADDR
// def_amount_of_people := GetMultiplayerSetting ( 1 ) ;
 429: LD_ADDR_EXP 2
 433: PUSH
 434: LD_INT 1
 436: PPUSH
 437: CALL_OW 426
 441: ST_TO_ADDR
// def_skill_level := GetMultiplayerSetting ( 2 ) ;
 442: LD_ADDR_EXP 3
 446: PUSH
 447: LD_INT 2
 449: PPUSH
 450: CALL_OW 426
 454: ST_TO_ADDR
// def_starting_resources := GetMultiplayerSetting ( 3 ) ;
 455: LD_ADDR_EXP 4
 459: PUSH
 460: LD_INT 3
 462: PPUSH
 463: CALL_OW 426
 467: ST_TO_ADDR
// def_shipments_density := GetMultiplayerSetting ( 4 ) ;
 468: LD_ADDR_EXP 5
 472: PUSH
 473: LD_INT 4
 475: PPUSH
 476: CALL_OW 426
 480: ST_TO_ADDR
// def_shared_vision := GetMultiplayerSetting ( 10 ) ;
 481: LD_ADDR_EXP 6
 485: PUSH
 486: LD_INT 10
 488: PPUSH
 489: CALL_OW 426
 493: ST_TO_ADDR
// def_people_respawning := GetMultiplayerSetting ( 13 ) ;
 494: LD_ADDR_EXP 7
 498: PUSH
 499: LD_INT 13
 501: PPUSH
 502: CALL_OW 426
 506: ST_TO_ADDR
// def_amount_of_apemen := GetMultiplayerSetting ( 14 ) ;
 507: LD_ADDR_EXP 8
 511: PUSH
 512: LD_INT 14
 514: PPUSH
 515: CALL_OW 426
 519: ST_TO_ADDR
// end else
 520: GO 582
// begin Randomize ;
 522: CALL_OW 10
// def_base_level := 2 ;
 526: LD_ADDR_EXP 1
 530: PUSH
 531: LD_INT 2
 533: ST_TO_ADDR
// def_amount_of_people := 0 ;
 534: LD_ADDR_EXP 2
 538: PUSH
 539: LD_INT 0
 541: ST_TO_ADDR
// def_skill_level := 1 ;
 542: LD_ADDR_EXP 3
 546: PUSH
 547: LD_INT 1
 549: ST_TO_ADDR
// def_starting_resources := 2 ;
 550: LD_ADDR_EXP 4
 554: PUSH
 555: LD_INT 2
 557: ST_TO_ADDR
// def_shipments_density := 1 ;
 558: LD_ADDR_EXP 5
 562: PUSH
 563: LD_INT 1
 565: ST_TO_ADDR
// def_shared_vision := 1 ;
 566: LD_ADDR_EXP 6
 570: PUSH
 571: LD_INT 1
 573: ST_TO_ADDR
// def_people_respawning := 2 ;
 574: LD_ADDR_EXP 7
 578: PUSH
 579: LD_INT 2
 581: ST_TO_ADDR
// end ; is_depot := [ 0 , 1 , 2 ] [ def_base_level + 1 ] ;
 582: LD_ADDR_EXP 9
 586: PUSH
 587: LD_INT 0
 589: PUSH
 590: LD_INT 1
 592: PUSH
 593: LD_INT 2
 595: PUSH
 596: EMPTY
 597: LIST
 598: LIST
 599: LIST
 600: PUSH
 601: LD_EXP 1
 605: PUSH
 606: LD_INT 1
 608: PLUS
 609: ARRAY
 610: ST_TO_ADDR
// number_of_breastworks := [ 0 , 0 , 2 ] [ def_base_level + 1 ] ;
 611: LD_ADDR_EXP 10
 615: PUSH
 616: LD_INT 0
 618: PUSH
 619: LD_INT 0
 621: PUSH
 622: LD_INT 2
 624: PUSH
 625: EMPTY
 626: LIST
 627: LIST
 628: LIST
 629: PUSH
 630: LD_EXP 1
 634: PUSH
 635: LD_INT 1
 637: PLUS
 638: ARRAY
 639: ST_TO_ADDR
// number_of_people := [ 9 , 12 , 15 , 24 ] [ def_amount_of_people + 1 ] ;
 640: LD_ADDR_EXP 11
 644: PUSH
 645: LD_INT 9
 647: PUSH
 648: LD_INT 12
 650: PUSH
 651: LD_INT 15
 653: PUSH
 654: LD_INT 24
 656: PUSH
 657: EMPTY
 658: LIST
 659: LIST
 660: LIST
 661: LIST
 662: PUSH
 663: LD_EXP 2
 667: PUSH
 668: LD_INT 1
 670: PLUS
 671: ARRAY
 672: ST_TO_ADDR
// skill_level := [ 3 , 5 , 6 , 7 ] [ def_skill_level + 1 ] ;
 673: LD_ADDR_EXP 12
 677: PUSH
 678: LD_INT 3
 680: PUSH
 681: LD_INT 5
 683: PUSH
 684: LD_INT 6
 686: PUSH
 687: LD_INT 7
 689: PUSH
 690: EMPTY
 691: LIST
 692: LIST
 693: LIST
 694: LIST
 695: PUSH
 696: LD_EXP 3
 700: PUSH
 701: LD_INT 1
 703: PLUS
 704: ARRAY
 705: ST_TO_ADDR
// starting_resources := [ [ 0 , 0 , 0 ] , [ 30 , 30 , 0 ] , [ 50 , 50 , 0 ] , [ 80 , 60 , 0 ] ] [ def_starting_resources + 1 ] ;
 706: LD_ADDR_EXP 14
 710: PUSH
 711: LD_INT 0
 713: PUSH
 714: LD_INT 0
 716: PUSH
 717: LD_INT 0
 719: PUSH
 720: EMPTY
 721: LIST
 722: LIST
 723: LIST
 724: PUSH
 725: LD_INT 30
 727: PUSH
 728: LD_INT 30
 730: PUSH
 731: LD_INT 0
 733: PUSH
 734: EMPTY
 735: LIST
 736: LIST
 737: LIST
 738: PUSH
 739: LD_INT 50
 741: PUSH
 742: LD_INT 50
 744: PUSH
 745: LD_INT 0
 747: PUSH
 748: EMPTY
 749: LIST
 750: LIST
 751: LIST
 752: PUSH
 753: LD_INT 80
 755: PUSH
 756: LD_INT 60
 758: PUSH
 759: LD_INT 0
 761: PUSH
 762: EMPTY
 763: LIST
 764: LIST
 765: LIST
 766: PUSH
 767: EMPTY
 768: LIST
 769: LIST
 770: LIST
 771: LIST
 772: PUSH
 773: LD_EXP 4
 777: PUSH
 778: LD_INT 1
 780: PLUS
 781: ARRAY
 782: ST_TO_ADDR
// starting_crates := [ [ 10 ] , [ 7 , 14 ] , [ 6 , 12 , 18 ] , [ 5 , 10 , 15 , 20 ] ] [ def_starting_resources + 1 ] ;
 783: LD_ADDR_EXP 13
 787: PUSH
 788: LD_INT 10
 790: PUSH
 791: EMPTY
 792: LIST
 793: PUSH
 794: LD_INT 7
 796: PUSH
 797: LD_INT 14
 799: PUSH
 800: EMPTY
 801: LIST
 802: LIST
 803: PUSH
 804: LD_INT 6
 806: PUSH
 807: LD_INT 12
 809: PUSH
 810: LD_INT 18
 812: PUSH
 813: EMPTY
 814: LIST
 815: LIST
 816: LIST
 817: PUSH
 818: LD_INT 5
 820: PUSH
 821: LD_INT 10
 823: PUSH
 824: LD_INT 15
 826: PUSH
 827: LD_INT 20
 829: PUSH
 830: EMPTY
 831: LIST
 832: LIST
 833: LIST
 834: LIST
 835: PUSH
 836: EMPTY
 837: LIST
 838: LIST
 839: LIST
 840: LIST
 841: PUSH
 842: LD_EXP 4
 846: PUSH
 847: LD_INT 1
 849: PLUS
 850: ARRAY
 851: ST_TO_ADDR
// shipments_density := [ 150 , 125 , 100 , 50 ] [ def_shipments_density + 1 ] ;
 852: LD_ADDR_EXP 15
 856: PUSH
 857: LD_INT 150
 859: PUSH
 860: LD_INT 125
 862: PUSH
 863: LD_INT 100
 865: PUSH
 866: LD_INT 50
 868: PUSH
 869: EMPTY
 870: LIST
 871: LIST
 872: LIST
 873: LIST
 874: PUSH
 875: LD_EXP 5
 879: PUSH
 880: LD_INT 1
 882: PLUS
 883: ARRAY
 884: ST_TO_ADDR
// respawning_time_min := [ 0 0$0 , 5 5$00 , 3 3$0 ] [ def_people_respawning + 1 ] ;
 885: LD_ADDR_EXP 19
 889: PUSH
 890: LD_INT 0
 892: PUSH
 893: LD_INT 10500
 895: PUSH
 896: LD_INT 6300
 898: PUSH
 899: EMPTY
 900: LIST
 901: LIST
 902: LIST
 903: PUSH
 904: LD_EXP 7
 908: PUSH
 909: LD_INT 1
 911: PLUS
 912: ARRAY
 913: ST_TO_ADDR
// respawning_time_max := [ 0 0$0 , 15 15$00 , 5 5$0 ] [ def_people_respawning + 1 ] ;
 914: LD_ADDR_EXP 20
 918: PUSH
 919: LD_INT 0
 921: PUSH
 922: LD_INT 31500
 924: PUSH
 925: LD_INT 10500
 927: PUSH
 928: EMPTY
 929: LIST
 930: LIST
 931: LIST
 932: PUSH
 933: LD_EXP 7
 937: PUSH
 938: LD_INT 1
 940: PLUS
 941: ARRAY
 942: ST_TO_ADDR
// amount_of_apemen := [ 0 , 3 , 6 , 9 ] [ def_amount_of_apemen + 1 ] ;
 943: LD_ADDR_EXP 17
 947: PUSH
 948: LD_INT 0
 950: PUSH
 951: LD_INT 3
 953: PUSH
 954: LD_INT 6
 956: PUSH
 957: LD_INT 9
 959: PUSH
 960: EMPTY
 961: LIST
 962: LIST
 963: LIST
 964: LIST
 965: PUSH
 966: LD_EXP 8
 970: PUSH
 971: LD_INT 1
 973: PLUS
 974: ARRAY
 975: ST_TO_ADDR
// end ;
 976: LD_VAR 0 1
 980: RET
// function init_map ; var i , j ; begin
 981: LD_INT 0
 983: PPUSH
 984: PPUSH
 985: PPUSH
// CreateDepositXY ( 18 , 8 , mat_oil ) ;
 986: LD_INT 18
 988: PPUSH
 989: LD_INT 8
 991: PPUSH
 992: LD_INT 2
 994: PPUSH
 995: CALL_OW 62
// CreateDepositXY ( 79 , 76 , mat_oil ) ;
 999: LD_INT 79
1001: PPUSH
1002: LD_INT 76
1004: PPUSH
1005: LD_INT 2
1007: PPUSH
1008: CALL_OW 62
// CreateDepositXY ( 105 , 61 , mat_oil ) ;
1012: LD_INT 105
1014: PPUSH
1015: LD_INT 61
1017: PPUSH
1018: LD_INT 2
1020: PPUSH
1021: CALL_OW 62
// CreateDepositXY ( 139 , 132 , mat_oil ) ;
1025: LD_INT 139
1027: PPUSH
1028: LD_INT 132
1030: PPUSH
1031: LD_INT 2
1033: PPUSH
1034: CALL_OW 62
// CreateDepositXY ( 114 , 192 , mat_oil ) ;
1038: LD_INT 114
1040: PPUSH
1041: LD_INT 192
1043: PPUSH
1044: LD_INT 2
1046: PPUSH
1047: CALL_OW 62
// CreateDepositXY ( 153 , 141 , mat_siberit ) ;
1051: LD_INT 153
1053: PPUSH
1054: LD_INT 141
1056: PPUSH
1057: LD_INT 3
1059: PPUSH
1060: CALL_OW 62
// CreateDepositXY ( 105 , 103 , mat_siberit ) ;
1064: LD_INT 105
1066: PPUSH
1067: LD_INT 103
1069: PPUSH
1070: LD_INT 3
1072: PPUSH
1073: CALL_OW 62
// depot_def := [ [ 81 , 82 , 4 ] , [ 98 , 53 , 2 ] , [ 137 , 134 , 2 ] , [ 10 , 6 , 2 ] , [ 101 , 192 , 0 ] ] ;
1077: LD_ADDR_EXP 27
1081: PUSH
1082: LD_INT 81
1084: PUSH
1085: LD_INT 82
1087: PUSH
1088: LD_INT 4
1090: PUSH
1091: EMPTY
1092: LIST
1093: LIST
1094: LIST
1095: PUSH
1096: LD_INT 98
1098: PUSH
1099: LD_INT 53
1101: PUSH
1102: LD_INT 2
1104: PUSH
1105: EMPTY
1106: LIST
1107: LIST
1108: LIST
1109: PUSH
1110: LD_INT 137
1112: PUSH
1113: LD_INT 134
1115: PUSH
1116: LD_INT 2
1118: PUSH
1119: EMPTY
1120: LIST
1121: LIST
1122: LIST
1123: PUSH
1124: LD_INT 10
1126: PUSH
1127: LD_INT 6
1129: PUSH
1130: LD_INT 2
1132: PUSH
1133: EMPTY
1134: LIST
1135: LIST
1136: LIST
1137: PUSH
1138: LD_INT 101
1140: PUSH
1141: LD_INT 192
1143: PUSH
1144: LD_INT 0
1146: PUSH
1147: EMPTY
1148: LIST
1149: LIST
1150: LIST
1151: PUSH
1152: EMPTY
1153: LIST
1154: LIST
1155: LIST
1156: LIST
1157: LIST
1158: ST_TO_ADDR
// breastworks_def := [ [ [ 64 , 77 , 2 ] , [ 73 , 92 , 1 ] ] , [ [ 93 , 71 , 5 ] , [ 96 , 65 , 5 ] ] , [ [ 137 , 137 , 1 ] , [ 143 , 148 , 1 ] ] , [ [ 23 , 29 , 5 ] , [ 25 , 18 , 5 ] ] , [ [ 91 , 174 , 3 ] , [ 99 , 175 , 3 ] ] ] ;
1159: LD_ADDR_EXP 28
1163: PUSH
1164: LD_INT 64
1166: PUSH
1167: LD_INT 77
1169: PUSH
1170: LD_INT 2
1172: PUSH
1173: EMPTY
1174: LIST
1175: LIST
1176: LIST
1177: PUSH
1178: LD_INT 73
1180: PUSH
1181: LD_INT 92
1183: PUSH
1184: LD_INT 1
1186: PUSH
1187: EMPTY
1188: LIST
1189: LIST
1190: LIST
1191: PUSH
1192: EMPTY
1193: LIST
1194: LIST
1195: PUSH
1196: LD_INT 93
1198: PUSH
1199: LD_INT 71
1201: PUSH
1202: LD_INT 5
1204: PUSH
1205: EMPTY
1206: LIST
1207: LIST
1208: LIST
1209: PUSH
1210: LD_INT 96
1212: PUSH
1213: LD_INT 65
1215: PUSH
1216: LD_INT 5
1218: PUSH
1219: EMPTY
1220: LIST
1221: LIST
1222: LIST
1223: PUSH
1224: EMPTY
1225: LIST
1226: LIST
1227: PUSH
1228: LD_INT 137
1230: PUSH
1231: LD_INT 137
1233: PUSH
1234: LD_INT 1
1236: PUSH
1237: EMPTY
1238: LIST
1239: LIST
1240: LIST
1241: PUSH
1242: LD_INT 143
1244: PUSH
1245: LD_INT 148
1247: PUSH
1248: LD_INT 1
1250: PUSH
1251: EMPTY
1252: LIST
1253: LIST
1254: LIST
1255: PUSH
1256: EMPTY
1257: LIST
1258: LIST
1259: PUSH
1260: LD_INT 23
1262: PUSH
1263: LD_INT 29
1265: PUSH
1266: LD_INT 5
1268: PUSH
1269: EMPTY
1270: LIST
1271: LIST
1272: LIST
1273: PUSH
1274: LD_INT 25
1276: PUSH
1277: LD_INT 18
1279: PUSH
1280: LD_INT 5
1282: PUSH
1283: EMPTY
1284: LIST
1285: LIST
1286: LIST
1287: PUSH
1288: EMPTY
1289: LIST
1290: LIST
1291: PUSH
1292: LD_INT 91
1294: PUSH
1295: LD_INT 174
1297: PUSH
1298: LD_INT 3
1300: PUSH
1301: EMPTY
1302: LIST
1303: LIST
1304: LIST
1305: PUSH
1306: LD_INT 99
1308: PUSH
1309: LD_INT 175
1311: PUSH
1312: LD_INT 3
1314: PUSH
1315: EMPTY
1316: LIST
1317: LIST
1318: LIST
1319: PUSH
1320: EMPTY
1321: LIST
1322: LIST
1323: PUSH
1324: EMPTY
1325: LIST
1326: LIST
1327: LIST
1328: LIST
1329: LIST
1330: ST_TO_ADDR
// for i in depot_def do
1331: LD_ADDR_VAR 0 2
1335: PUSH
1336: LD_EXP 27
1340: PUSH
1341: FOR_IN
1342: IFFALSE 1416
// start_def := start_def ^ [ [ ShiftX ( i [ 1 ] , i [ 3 ] , 10 ) , ShiftY ( i [ 2 ] , i [ 3 ] , 10 ) ] ] ;
1344: LD_ADDR_EXP 29
1348: PUSH
1349: LD_EXP 29
1353: PUSH
1354: LD_VAR 0 2
1358: PUSH
1359: LD_INT 1
1361: ARRAY
1362: PPUSH
1363: LD_VAR 0 2
1367: PUSH
1368: LD_INT 3
1370: ARRAY
1371: PPUSH
1372: LD_INT 10
1374: PPUSH
1375: CALL_OW 272
1379: PUSH
1380: LD_VAR 0 2
1384: PUSH
1385: LD_INT 2
1387: ARRAY
1388: PPUSH
1389: LD_VAR 0 2
1393: PUSH
1394: LD_INT 3
1396: ARRAY
1397: PPUSH
1398: LD_INT 10
1400: PPUSH
1401: CALL_OW 273
1405: PUSH
1406: EMPTY
1407: LIST
1408: LIST
1409: PUSH
1410: EMPTY
1411: LIST
1412: ADD
1413: ST_TO_ADDR
1414: GO 1341
1416: POP
1417: POP
// end ;
1418: LD_VAR 0 1
1422: RET
// function set_shared_visions_and_alliances ; var i , j ; begin
1423: LD_INT 0
1425: PPUSH
1426: PPUSH
1427: PPUSH
// if not Team_Game then
1428: LD_EXP 25
1432: NOT
1433: IFFALSE 1531
// begin for i = 1 to 8 do
1435: LD_ADDR_VAR 0 2
1439: PUSH
1440: DOUBLE
1441: LD_INT 1
1443: DEC
1444: ST_TO_ADDR
1445: LD_INT 8
1447: PUSH
1448: FOR_TO
1449: IFFALSE 1527
// for j = 1 to 8 do
1451: LD_ADDR_VAR 0 3
1455: PUSH
1456: DOUBLE
1457: LD_INT 1
1459: DEC
1460: ST_TO_ADDR
1461: LD_INT 8
1463: PUSH
1464: FOR_TO
1465: IFFALSE 1523
// if i <> j then
1467: LD_VAR 0 2
1471: PUSH
1472: LD_VAR 0 3
1476: NONEQUAL
1477: IFFALSE 1501
// SetAttitude ( i , j , att_neutral , true ) else
1479: LD_VAR 0 2
1483: PPUSH
1484: LD_VAR 0 3
1488: PPUSH
1489: LD_INT 0
1491: PPUSH
1492: LD_INT 1
1494: PPUSH
1495: CALL_OW 80
1499: GO 1521
// SetAttitude ( i , j , att_friend , true ) ;
1501: LD_VAR 0 2
1505: PPUSH
1506: LD_VAR 0 3
1510: PPUSH
1511: LD_INT 1
1513: PPUSH
1514: LD_INT 1
1516: PPUSH
1517: CALL_OW 80
1521: GO 1464
1523: POP
1524: POP
1525: GO 1448
1527: POP
1528: POP
// end else
1529: GO 1706
// begin if def_shared_vision then
1531: LD_EXP 6
1535: IFFALSE 1600
// begin for i in Teams do
1537: LD_ADDR_VAR 0 2
1541: PUSH
1542: LD_EXP 22
1546: PUSH
1547: FOR_IN
1548: IFFALSE 1598
// for j = 2 to i do
1550: LD_ADDR_VAR 0 3
1554: PUSH
1555: DOUBLE
1556: LD_INT 2
1558: DEC
1559: ST_TO_ADDR
1560: LD_VAR 0 2
1564: PUSH
1565: FOR_TO
1566: IFFALSE 1594
// ChangeSideFog ( i [ j ] , i [ 1 ] ) ;
1568: LD_VAR 0 2
1572: PUSH
1573: LD_VAR 0 3
1577: ARRAY
1578: PPUSH
1579: LD_VAR 0 2
1583: PUSH
1584: LD_INT 1
1586: ARRAY
1587: PPUSH
1588: CALL_OW 343
1592: GO 1565
1594: POP
1595: POP
1596: GO 1547
1598: POP
1599: POP
// end ; for i = 1 to 8 do
1600: LD_ADDR_VAR 0 2
1604: PUSH
1605: DOUBLE
1606: LD_INT 1
1608: DEC
1609: ST_TO_ADDR
1610: LD_INT 8
1612: PUSH
1613: FOR_TO
1614: IFFALSE 1704
// for j = 1 to 8 do
1616: LD_ADDR_VAR 0 3
1620: PUSH
1621: DOUBLE
1622: LD_INT 1
1624: DEC
1625: ST_TO_ADDR
1626: LD_INT 8
1628: PUSH
1629: FOR_TO
1630: IFFALSE 1700
// if Side_Teams [ i ] = Side_Teams [ j ] then
1632: LD_EXP 21
1636: PUSH
1637: LD_VAR 0 2
1641: ARRAY
1642: PUSH
1643: LD_EXP 21
1647: PUSH
1648: LD_VAR 0 3
1652: ARRAY
1653: EQUAL
1654: IFFALSE 1678
// SetAttitude ( i , j , att_friend , true ) else
1656: LD_VAR 0 2
1660: PPUSH
1661: LD_VAR 0 3
1665: PPUSH
1666: LD_INT 1
1668: PPUSH
1669: LD_INT 1
1671: PPUSH
1672: CALL_OW 80
1676: GO 1698
// SetAttitude ( i , j , att_enemy , true ) ;
1678: LD_VAR 0 2
1682: PPUSH
1683: LD_VAR 0 3
1687: PPUSH
1688: LD_INT 2
1690: PPUSH
1691: LD_INT 1
1693: PPUSH
1694: CALL_OW 80
1698: GO 1629
1700: POP
1701: POP
1702: GO 1613
1704: POP
1705: POP
// end ; end ;
1706: LD_VAR 0 1
1710: RET
// function gall ; var gal ; begin
1711: LD_INT 0
1713: PPUSH
1714: PPUSH
// gal := [ [ us , 20 , sex_male , Gary ] , [ us , 15 , sex_male , Brown ] , [ ru , 1 , sex_male , Burlak ] , [ ru , 18 , sex_male , Vsevolod ] , [ us , 18 , sex_male , Kurt ] ] ;
1715: LD_ADDR_VAR 0 2
1719: PUSH
1720: LD_STRING us
1722: PUSH
1723: LD_INT 20
1725: PUSH
1726: LD_INT 1
1728: PUSH
1729: LD_STRING Gary
1731: PUSH
1732: EMPTY
1733: LIST
1734: LIST
1735: LIST
1736: LIST
1737: PUSH
1738: LD_STRING us
1740: PUSH
1741: LD_INT 15
1743: PUSH
1744: LD_INT 1
1746: PUSH
1747: LD_STRING Brown
1749: PUSH
1750: EMPTY
1751: LIST
1752: LIST
1753: LIST
1754: LIST
1755: PUSH
1756: LD_STRING ru
1758: PUSH
1759: LD_INT 1
1761: PUSH
1762: LD_INT 1
1764: PUSH
1765: LD_STRING Burlak
1767: PUSH
1768: EMPTY
1769: LIST
1770: LIST
1771: LIST
1772: LIST
1773: PUSH
1774: LD_STRING ru
1776: PUSH
1777: LD_INT 18
1779: PUSH
1780: LD_INT 1
1782: PUSH
1783: LD_STRING Vsevolod
1785: PUSH
1786: EMPTY
1787: LIST
1788: LIST
1789: LIST
1790: LIST
1791: PUSH
1792: LD_STRING us
1794: PUSH
1795: LD_INT 18
1797: PUSH
1798: LD_INT 1
1800: PUSH
1801: LD_STRING Kurt
1803: PUSH
1804: EMPTY
1805: LIST
1806: LIST
1807: LIST
1808: LIST
1809: PUSH
1810: EMPTY
1811: LIST
1812: LIST
1813: LIST
1814: LIST
1815: LIST
1816: ST_TO_ADDR
// result := gal ;
1817: LD_ADDR_VAR 0 1
1821: PUSH
1822: LD_VAR 0 2
1826: ST_TO_ADDR
// end ;
1827: LD_VAR 0 1
1831: RET
// function prepare_people ( count , cl , x , y , r ) ; var i , j , un , k , c ; begin
1832: LD_INT 0
1834: PPUSH
1835: PPUSH
1836: PPUSH
1837: PPUSH
1838: PPUSH
1839: PPUSH
// result := [ ] ;
1840: LD_ADDR_VAR 0 6
1844: PUSH
1845: EMPTY
1846: ST_TO_ADDR
// for i := 1 to count do
1847: LD_ADDR_VAR 0 7
1851: PUSH
1852: DOUBLE
1853: LD_INT 1
1855: DEC
1856: ST_TO_ADDR
1857: LD_VAR 0 1
1861: PUSH
1862: FOR_TO
1863: IFFALSE 2370
// begin uc_direction := Rand ( 0 , 5 ) ;
1865: LD_ADDR_OWVAR 24
1869: PUSH
1870: LD_INT 0
1872: PPUSH
1873: LD_INT 5
1875: PPUSH
1876: CALL_OW 12
1880: ST_TO_ADDR
// if commander then
1881: LD_LOC 1
1885: IFFALSE 2097
// begin commander := false ;
1887: LD_ADDR_LOC 1
1891: PUSH
1892: LD_INT 0
1894: ST_TO_ADDR
// if Multiplayer then
1895: LD_OWVAR 4
1899: IFFALSE 2095
// begin for c = 1 to 8 do
1901: LD_ADDR_VAR 0 11
1905: PUSH
1906: DOUBLE
1907: LD_INT 1
1909: DEC
1910: ST_TO_ADDR
1911: LD_INT 8
1913: PUSH
1914: FOR_TO
1915: IFFALSE 2093
// begin if cSides [ c ] > 0 then
1917: LD_EXP 35
1921: PUSH
1922: LD_VAR 0 11
1926: ARRAY
1927: PUSH
1928: LD_INT 0
1930: GREATER
1931: IFFALSE 2091
// begin k := cSides [ c ] ;
1933: LD_ADDR_VAR 0 10
1937: PUSH
1938: LD_EXP 35
1942: PUSH
1943: LD_VAR 0 11
1947: ARRAY
1948: ST_TO_ADDR
// PrepareHuman ( Rand ( 1 , 2 ) , cl , skill_level + 2 ) ;
1949: LD_INT 1
1951: PPUSH
1952: LD_INT 2
1954: PPUSH
1955: CALL_OW 12
1959: PPUSH
1960: LD_VAR 0 2
1964: PPUSH
1965: LD_EXP 12
1969: PUSH
1970: LD_INT 2
1972: PLUS
1973: PPUSH
1974: CALL_OW 380
// hc_gallery := gall [ k ] [ 1 ] ;
1978: LD_ADDR_OWVAR 33
1982: PUSH
1983: CALL 1711 0 0
1987: PUSH
1988: LD_VAR 0 10
1992: ARRAY
1993: PUSH
1994: LD_INT 1
1996: ARRAY
1997: ST_TO_ADDR
// hc_face_number := gall [ k ] [ 2 ] ;
1998: LD_ADDR_OWVAR 34
2002: PUSH
2003: CALL 1711 0 0
2007: PUSH
2008: LD_VAR 0 10
2012: ARRAY
2013: PUSH
2014: LD_INT 2
2016: ARRAY
2017: ST_TO_ADDR
// hc_sex := gall [ k ] [ 3 ] ;
2018: LD_ADDR_OWVAR 27
2022: PUSH
2023: CALL 1711 0 0
2027: PUSH
2028: LD_VAR 0 10
2032: ARRAY
2033: PUSH
2034: LD_INT 3
2036: ARRAY
2037: ST_TO_ADDR
// hc_name := gall [ k ] [ 4 ] ;
2038: LD_ADDR_OWVAR 26
2042: PUSH
2043: CALL 1711 0 0
2047: PUSH
2048: LD_VAR 0 10
2052: ARRAY
2053: PUSH
2054: LD_INT 4
2056: ARRAY
2057: ST_TO_ADDR
// hc_importance := 105 ;
2058: LD_ADDR_OWVAR 32
2062: PUSH
2063: LD_INT 105
2065: ST_TO_ADDR
// cSides := Replace ( cSides , c , 0 ) ;
2066: LD_ADDR_EXP 35
2070: PUSH
2071: LD_EXP 35
2075: PPUSH
2076: LD_VAR 0 11
2080: PPUSH
2081: LD_INT 0
2083: PPUSH
2084: CALL_OW 1
2088: ST_TO_ADDR
// break ;
2089: GO 2093
// end ; end ;
2091: GO 1914
2093: POP
2094: POP
// end ; end else
2095: GO 2168
// begin hc_gallery :=  ;
2097: LD_ADDR_OWVAR 33
2101: PUSH
2102: LD_STRING 
2104: ST_TO_ADDR
// hc_name :=  ;
2105: LD_ADDR_OWVAR 26
2109: PUSH
2110: LD_STRING 
2112: ST_TO_ADDR
// hc_importance := 0 ;
2113: LD_ADDR_OWVAR 32
2117: PUSH
2118: LD_INT 0
2120: ST_TO_ADDR
// PrepareHuman ( rand ( 1 , 2 ) , cl , skill_level ) ;
2121: LD_INT 1
2123: PPUSH
2124: LD_INT 2
2126: PPUSH
2127: CALL_OW 12
2131: PPUSH
2132: LD_VAR 0 2
2136: PPUSH
2137: LD_EXP 12
2141: PPUSH
2142: CALL_OW 380
// if Multiplayer then
2146: LD_OWVAR 4
2150: IFFALSE 2168
// begin hc_gallery :=  ;
2152: LD_ADDR_OWVAR 33
2156: PUSH
2157: LD_STRING 
2159: ST_TO_ADDR
// hc_face_number := 0 ;
2160: LD_ADDR_OWVAR 34
2164: PUSH
2165: LD_INT 0
2167: ST_TO_ADDR
// end ; end ; un := CreateHuman ;
2168: LD_ADDR_VAR 0 9
2172: PUSH
2173: CALL_OW 44
2177: ST_TO_ADDR
// if global_defined then
2178: LD_LOC 3
2182: IFFALSE 2322
// begin if ( cl = class_soldier ) then
2184: LD_VAR 0 2
2188: PUSH
2189: LD_INT 1
2191: EQUAL
2192: IFFALSE 2212
// j := i + soldiers_created else
2194: LD_ADDR_VAR 0 8
2198: PUSH
2199: LD_VAR 0 7
2203: PUSH
2204: LD_LOC 4
2208: PLUS
2209: ST_TO_ADDR
2210: GO 2222
// j := i ;
2212: LD_ADDR_VAR 0 8
2216: PUSH
2217: LD_VAR 0 7
2221: ST_TO_ADDR
// CopySkills ( global_units [ cl ] [ j ] , un ) ;
2222: LD_LOC 2
2226: PUSH
2227: LD_VAR 0 2
2231: ARRAY
2232: PUSH
2233: LD_VAR 0 8
2237: ARRAY
2238: PPUSH
2239: LD_VAR 0 9
2243: PPUSH
2244: CALL_OW 510
// SetAttr ( un , attr_speed , GetAttr ( global_units [ cl ] [ j ] , attr_speed ) ) ;
2248: LD_VAR 0 9
2252: PPUSH
2253: LD_INT 2
2255: PPUSH
2256: LD_LOC 2
2260: PUSH
2261: LD_VAR 0 2
2265: ARRAY
2266: PUSH
2267: LD_VAR 0 8
2271: ARRAY
2272: PPUSH
2273: LD_INT 2
2275: PPUSH
2276: CALL_OW 260
2280: PPUSH
2281: CALL_OW 239
// SetAttr ( un , attr_stamina , GetAttr ( global_units [ cl ] [ j ] , attr_stamina ) ) ;
2285: LD_VAR 0 9
2289: PPUSH
2290: LD_INT 1
2292: PPUSH
2293: LD_LOC 2
2297: PUSH
2298: LD_VAR 0 2
2302: ARRAY
2303: PUSH
2304: LD_VAR 0 8
2308: ARRAY
2309: PPUSH
2310: LD_INT 1
2312: PPUSH
2313: CALL_OW 260
2317: PPUSH
2318: CALL_OW 239
// end ; PlaceUnitXYR ( un , x , y , r , false ) ;
2322: LD_VAR 0 9
2326: PPUSH
2327: LD_VAR 0 3
2331: PPUSH
2332: LD_VAR 0 4
2336: PPUSH
2337: LD_VAR 0 5
2341: PPUSH
2342: LD_INT 0
2344: PPUSH
2345: CALL_OW 50
// result := result ^ [ un ] ;
2349: LD_ADDR_VAR 0 6
2353: PUSH
2354: LD_VAR 0 6
2358: PUSH
2359: LD_VAR 0 9
2363: PUSH
2364: EMPTY
2365: LIST
2366: ADD
2367: ST_TO_ADDR
// end ;
2368: GO 1862
2370: POP
2371: POP
// if not global_defined then
2372: LD_LOC 3
2376: NOT
2377: IFFALSE 2455
// if ( global_units >= cl ) then
2379: LD_LOC 2
2383: PUSH
2384: LD_VAR 0 2
2388: GREATEREQUAL
2389: IFFALSE 2430
// global_units := Replace ( global_units , cl , global_units [ cl ] ^ result ) else
2391: LD_ADDR_LOC 2
2395: PUSH
2396: LD_LOC 2
2400: PPUSH
2401: LD_VAR 0 2
2405: PPUSH
2406: LD_LOC 2
2410: PUSH
2411: LD_VAR 0 2
2415: ARRAY
2416: PUSH
2417: LD_VAR 0 6
2421: ADD
2422: PPUSH
2423: CALL_OW 1
2427: ST_TO_ADDR
2428: GO 2455
// global_units := Replace ( global_units , cl , result ) ;
2430: LD_ADDR_LOC 2
2434: PUSH
2435: LD_LOC 2
2439: PPUSH
2440: LD_VAR 0 2
2444: PPUSH
2445: LD_VAR 0 6
2449: PPUSH
2450: CALL_OW 1
2454: ST_TO_ADDR
// end ;
2455: LD_VAR 0 6
2459: RET
// function prepare_side ( side ) ; var pos , x , y , dir , i , r , sol , br , dep ; begin
2460: LD_INT 0
2462: PPUSH
2463: PPUSH
2464: PPUSH
2465: PPUSH
2466: PPUSH
2467: PPUSH
2468: PPUSH
2469: PPUSH
2470: PPUSH
2471: PPUSH
// pos := Side_Positions [ side ] ;
2472: LD_ADDR_VAR 0 3
2476: PUSH
2477: LD_EXP 23
2481: PUSH
2482: LD_VAR 0 1
2486: ARRAY
2487: ST_TO_ADDR
// uc_nation := Side_Nations [ side ] ;
2488: LD_ADDR_OWVAR 21
2492: PUSH
2493: LD_EXP 24
2497: PUSH
2498: LD_VAR 0 1
2502: ARRAY
2503: ST_TO_ADDR
// uc_side := side ;
2504: LD_ADDR_OWVAR 20
2508: PUSH
2509: LD_VAR 0 1
2513: ST_TO_ADDR
// x := depot_def [ pos ] [ 1 ] ;
2514: LD_ADDR_VAR 0 4
2518: PUSH
2519: LD_EXP 27
2523: PUSH
2524: LD_VAR 0 3
2528: ARRAY
2529: PUSH
2530: LD_INT 1
2532: ARRAY
2533: ST_TO_ADDR
// y := depot_def [ pos ] [ 2 ] ;
2534: LD_ADDR_VAR 0 5
2538: PUSH
2539: LD_EXP 27
2543: PUSH
2544: LD_VAR 0 3
2548: ARRAY
2549: PUSH
2550: LD_INT 2
2552: ARRAY
2553: ST_TO_ADDR
// dir := depot_def [ pos ] [ 3 ] ;
2554: LD_ADDR_VAR 0 6
2558: PUSH
2559: LD_EXP 27
2563: PUSH
2564: LD_VAR 0 3
2568: ARRAY
2569: PUSH
2570: LD_INT 3
2572: ARRAY
2573: ST_TO_ADDR
// if is_depot then
2574: LD_EXP 9
2578: IFFALSE 2685
// begin bc_type = b_depot ;
2580: LD_ADDR_OWVAR 42
2584: PUSH
2585: LD_INT 0
2587: ST_TO_ADDR
// dep := CreateAndPlaceBuildingXYD ( x , y , dir ) ;
2588: LD_ADDR_VAR 0 11
2592: PUSH
2593: LD_VAR 0 4
2597: PPUSH
2598: LD_VAR 0 5
2602: PPUSH
2603: LD_VAR 0 6
2607: PPUSH
2608: CALL_OW 47
2612: ST_TO_ADDR
// SetBName ( dep , @ & side ) ;
2613: LD_VAR 0 11
2617: PPUSH
2618: LD_STRING @
2620: PUSH
2621: LD_VAR 0 1
2625: STR
2626: PPUSH
2627: CALL_OW 500
// SetResourceType ( GetBase ( dep ) , mat_cans , starting_resources [ mat_cans ] ) ;
2631: LD_VAR 0 11
2635: PPUSH
2636: CALL_OW 274
2640: PPUSH
2641: LD_INT 1
2643: PPUSH
2644: LD_EXP 14
2648: PUSH
2649: LD_INT 1
2651: ARRAY
2652: PPUSH
2653: CALL_OW 277
// SetResourceType ( GetBase ( dep ) , mat_oil , starting_resources [ mat_oil ] ) ;
2657: LD_VAR 0 11
2661: PPUSH
2662: CALL_OW 274
2666: PPUSH
2667: LD_INT 2
2669: PPUSH
2670: LD_EXP 14
2674: PUSH
2675: LD_INT 2
2677: ARRAY
2678: PPUSH
2679: CALL_OW 277
// end else
2683: GO 2829
// begin for i := 1 to 3 do
2685: LD_ADDR_VAR 0 7
2689: PUSH
2690: DOUBLE
2691: LD_INT 1
2693: DEC
2694: ST_TO_ADDR
2695: LD_INT 3
2697: PUSH
2698: FOR_TO
2699: IFFALSE 2827
// begin r := starting_resources [ i ] ;
2701: LD_ADDR_VAR 0 8
2705: PUSH
2706: LD_EXP 14
2710: PUSH
2711: LD_VAR 0 7
2715: ARRAY
2716: ST_TO_ADDR
// while r >= 10 do
2717: LD_VAR 0 8
2721: PUSH
2722: LD_INT 10
2724: GREATEREQUAL
2725: IFFALSE 2825
// if r > 50 then
2727: LD_VAR 0 8
2731: PUSH
2732: LD_INT 50
2734: GREATER
2735: IFFALSE 2781
// begin CreateResourcesXYR ( i , 5 , x , y , 4 , false ) ;
2737: LD_VAR 0 7
2741: PPUSH
2742: LD_INT 5
2744: PPUSH
2745: LD_VAR 0 4
2749: PPUSH
2750: LD_VAR 0 5
2754: PPUSH
2755: LD_INT 4
2757: PPUSH
2758: LD_INT 0
2760: PPUSH
2761: CALL_OW 60
// r := r - 50 ;
2765: LD_ADDR_VAR 0 8
2769: PUSH
2770: LD_VAR 0 8
2774: PUSH
2775: LD_INT 50
2777: MINUS
2778: ST_TO_ADDR
// end else
2779: GO 2823
// begin CreateResourcesXYR ( i , r div 10 , x , y , 4 , false ) ;
2781: LD_VAR 0 7
2785: PPUSH
2786: LD_VAR 0 8
2790: PUSH
2791: LD_INT 10
2793: DIV
2794: PPUSH
2795: LD_VAR 0 4
2799: PPUSH
2800: LD_VAR 0 5
2804: PPUSH
2805: LD_INT 4
2807: PPUSH
2808: LD_INT 0
2810: PPUSH
2811: CALL_OW 60
// r := 0 ;
2815: LD_ADDR_VAR 0 8
2819: PUSH
2820: LD_INT 0
2822: ST_TO_ADDR
// end ;
2823: GO 2717
// end ;
2825: GO 2698
2827: POP
2828: POP
// end ; for r in starting_crates do
2829: LD_ADDR_VAR 0 8
2833: PUSH
2834: LD_EXP 13
2838: PUSH
2839: FOR_IN
2840: IFFALSE 2872
// CreateResourcesXYR ( mat_cans , 5 , x , y , r , false ) ;
2842: LD_INT 1
2844: PPUSH
2845: LD_INT 5
2847: PPUSH
2848: LD_VAR 0 4
2852: PPUSH
2853: LD_VAR 0 5
2857: PPUSH
2858: LD_VAR 0 8
2862: PPUSH
2863: LD_INT 0
2865: PPUSH
2866: CALL_OW 60
2870: GO 2839
2872: POP
2873: POP
// commander := true ;
2874: LD_ADDR_LOC 1
2878: PUSH
2879: LD_INT 1
2881: ST_TO_ADDR
// soldiers_created := 0 ;
2882: LD_ADDR_LOC 4
2886: PUSH
2887: LD_INT 0
2889: ST_TO_ADDR
// for i := 1 to number_of_breastworks do
2890: LD_ADDR_VAR 0 7
2894: PUSH
2895: DOUBLE
2896: LD_INT 1
2898: DEC
2899: ST_TO_ADDR
2900: LD_EXP 10
2904: PUSH
2905: FOR_TO
2906: IFFALSE 3128
// begin x := breastworks_def [ pos ] [ i ] [ 1 ] ;
2908: LD_ADDR_VAR 0 4
2912: PUSH
2913: LD_EXP 28
2917: PUSH
2918: LD_VAR 0 3
2922: ARRAY
2923: PUSH
2924: LD_VAR 0 7
2928: ARRAY
2929: PUSH
2930: LD_INT 1
2932: ARRAY
2933: ST_TO_ADDR
// y := breastworks_def [ pos ] [ i ] [ 2 ] ;
2934: LD_ADDR_VAR 0 5
2938: PUSH
2939: LD_EXP 28
2943: PUSH
2944: LD_VAR 0 3
2948: ARRAY
2949: PUSH
2950: LD_VAR 0 7
2954: ARRAY
2955: PUSH
2956: LD_INT 2
2958: ARRAY
2959: ST_TO_ADDR
// dir := breastworks_def [ pos ] [ i ] [ 3 ] ;
2960: LD_ADDR_VAR 0 6
2964: PUSH
2965: LD_EXP 28
2969: PUSH
2970: LD_VAR 0 3
2974: ARRAY
2975: PUSH
2976: LD_VAR 0 7
2980: ARRAY
2981: PUSH
2982: LD_INT 3
2984: ARRAY
2985: ST_TO_ADDR
// bc_type := b_breastwork ;
2986: LD_ADDR_OWVAR 42
2990: PUSH
2991: LD_INT 31
2993: ST_TO_ADDR
// br := CreateAndPlaceBuildingXYD ( x , y , dir ) ;
2994: LD_ADDR_VAR 0 10
2998: PUSH
2999: LD_VAR 0 4
3003: PPUSH
3004: LD_VAR 0 5
3008: PPUSH
3009: LD_VAR 0 6
3013: PPUSH
3014: CALL_OW 47
3018: ST_TO_ADDR
// x := ShiftX ( x , dir , 2 ) ;
3019: LD_ADDR_VAR 0 4
3023: PUSH
3024: LD_VAR 0 4
3028: PPUSH
3029: LD_VAR 0 6
3033: PPUSH
3034: LD_INT 2
3036: PPUSH
3037: CALL_OW 272
3041: ST_TO_ADDR
// y := ShiftY ( y , dir , 2 ) ;
3042: LD_ADDR_VAR 0 5
3046: PUSH
3047: LD_VAR 0 5
3051: PPUSH
3052: LD_VAR 0 6
3056: PPUSH
3057: LD_INT 2
3059: PPUSH
3060: CALL_OW 273
3064: ST_TO_ADDR
// sol := prepare_people ( 1 , class_soldier , x , y , 0 ) [ 1 ] ;
3065: LD_ADDR_VAR 0 9
3069: PUSH
3070: LD_INT 1
3072: PPUSH
3073: LD_INT 1
3075: PPUSH
3076: LD_VAR 0 4
3080: PPUSH
3081: LD_VAR 0 5
3085: PPUSH
3086: LD_INT 0
3088: PPUSH
3089: CALL 1832 0 5
3093: PUSH
3094: LD_INT 1
3096: ARRAY
3097: ST_TO_ADDR
// soldiers_created := soldiers_created + 1 ;
3098: LD_ADDR_LOC 4
3102: PUSH
3103: LD_LOC 4
3107: PUSH
3108: LD_INT 1
3110: PLUS
3111: ST_TO_ADDR
// ComEnterUnit ( sol , br ) ;
3112: LD_VAR 0 9
3116: PPUSH
3117: LD_VAR 0 10
3121: PPUSH
3122: CALL_OW 120
// end ;
3126: GO 2905
3128: POP
3129: POP
// x := start_def [ pos ] [ 1 ] ;
3130: LD_ADDR_VAR 0 4
3134: PUSH
3135: LD_EXP 29
3139: PUSH
3140: LD_VAR 0 3
3144: ARRAY
3145: PUSH
3146: LD_INT 1
3148: ARRAY
3149: ST_TO_ADDR
// y := start_def [ pos ] [ 2 ] ;
3150: LD_ADDR_VAR 0 5
3154: PUSH
3155: LD_EXP 29
3159: PUSH
3160: LD_VAR 0 3
3164: ARRAY
3165: PUSH
3166: LD_INT 2
3168: ARRAY
3169: ST_TO_ADDR
// prepare_people ( nsol - number_of_breastworks , class_soldier , x , y , 5 ) ;
3170: LD_LOC 8
3174: PUSH
3175: LD_EXP 10
3179: MINUS
3180: PPUSH
3181: LD_INT 1
3183: PPUSH
3184: LD_VAR 0 4
3188: PPUSH
3189: LD_VAR 0 5
3193: PPUSH
3194: LD_INT 5
3196: PPUSH
3197: CALL 1832 0 5
// prepare_people ( neng , class_engineer , x , y , 5 ) ;
3201: LD_LOC 5
3205: PPUSH
3206: LD_INT 2
3208: PPUSH
3209: LD_VAR 0 4
3213: PPUSH
3214: LD_VAR 0 5
3218: PPUSH
3219: LD_INT 5
3221: PPUSH
3222: CALL 1832 0 5
// prepare_people ( nmech , class_mechanic , x , y , 5 ) ;
3226: LD_LOC 7
3230: PPUSH
3231: LD_INT 3
3233: PPUSH
3234: LD_VAR 0 4
3238: PPUSH
3239: LD_VAR 0 5
3243: PPUSH
3244: LD_INT 5
3246: PPUSH
3247: CALL 1832 0 5
// prepare_people ( nsci , class_scientistic , x , y , 5 ) ;
3251: LD_LOC 6
3255: PPUSH
3256: LD_INT 4
3258: PPUSH
3259: LD_VAR 0 4
3263: PPUSH
3264: LD_VAR 0 5
3268: PPUSH
3269: LD_INT 5
3271: PPUSH
3272: CALL 1832 0 5
// global_defined := true ;
3276: LD_ADDR_LOC 3
3280: PUSH
3281: LD_INT 1
3283: ST_TO_ADDR
// end ;
3284: LD_VAR 0 2
3288: RET
// function prepare_sides ; var i ; begin
3289: LD_INT 0
3291: PPUSH
3292: PPUSH
// global_units := [ ] ;
3293: LD_ADDR_LOC 2
3297: PUSH
3298: EMPTY
3299: ST_TO_ADDR
// global_defined := false ;
3300: LD_ADDR_LOC 3
3304: PUSH
3305: LD_INT 0
3307: ST_TO_ADDR
// CountClassMembers ;
3308: CALL 3358 0 0
// for i := 1 to 8 do
3312: LD_ADDR_VAR 0 2
3316: PUSH
3317: DOUBLE
3318: LD_INT 1
3320: DEC
3321: ST_TO_ADDR
3322: LD_INT 8
3324: PUSH
3325: FOR_TO
3326: IFFALSE 3351
// if Side_Positions [ i ] then
3328: LD_EXP 23
3332: PUSH
3333: LD_VAR 0 2
3337: ARRAY
3338: IFFALSE 3349
// prepare_side ( i ) ;
3340: LD_VAR 0 2
3344: PPUSH
3345: CALL 2460 0 1
3349: GO 3325
3351: POP
3352: POP
// end ;
3353: LD_VAR 0 1
3357: RET
// function CountClassMembers ; var Mode ; begin
3358: LD_INT 0
3360: PPUSH
3361: PPUSH
// Mode := 1 ;
3362: LD_ADDR_VAR 0 2
3366: PUSH
3367: LD_INT 1
3369: ST_TO_ADDR
// neng := number_of_people ;
3370: LD_ADDR_LOC 5
3374: PUSH
3375: LD_EXP 11
3379: ST_TO_ADDR
// nsol := neng div [ 4 , 3 ] [ Mode ] ;
3380: LD_ADDR_LOC 8
3384: PUSH
3385: LD_LOC 5
3389: PUSH
3390: LD_INT 4
3392: PUSH
3393: LD_INT 3
3395: PUSH
3396: EMPTY
3397: LIST
3398: LIST
3399: PUSH
3400: LD_VAR 0 2
3404: ARRAY
3405: DIV
3406: ST_TO_ADDR
// if ( nsol < number_of_breastworks ) then
3407: LD_LOC 8
3411: PUSH
3412: LD_EXP 10
3416: LESS
3417: IFFALSE 3429
// nsol := number_of_breastworks ;
3419: LD_ADDR_LOC 8
3423: PUSH
3424: LD_EXP 10
3428: ST_TO_ADDR
// neng := neng - nsol ;
3429: LD_ADDR_LOC 5
3433: PUSH
3434: LD_LOC 5
3438: PUSH
3439: LD_LOC 8
3443: MINUS
3444: ST_TO_ADDR
// nsci := neng div [ 3 , 2 ] [ Mode ] ;
3445: LD_ADDR_LOC 6
3449: PUSH
3450: LD_LOC 5
3454: PUSH
3455: LD_INT 3
3457: PUSH
3458: LD_INT 2
3460: PUSH
3461: EMPTY
3462: LIST
3463: LIST
3464: PUSH
3465: LD_VAR 0 2
3469: ARRAY
3470: DIV
3471: ST_TO_ADDR
// if ( nsci < 1 ) then
3472: LD_LOC 6
3476: PUSH
3477: LD_INT 1
3479: LESS
3480: IFFALSE 3490
// nsci := 1 ;
3482: LD_ADDR_LOC 6
3486: PUSH
3487: LD_INT 1
3489: ST_TO_ADDR
// neng := neng - nsci ;
3490: LD_ADDR_LOC 5
3494: PUSH
3495: LD_LOC 5
3499: PUSH
3500: LD_LOC 6
3504: MINUS
3505: ST_TO_ADDR
// nmech := [ neng div 2 , 0 ] [ Mode ] ;
3506: LD_ADDR_LOC 7
3510: PUSH
3511: LD_LOC 5
3515: PUSH
3516: LD_INT 2
3518: DIV
3519: PUSH
3520: LD_INT 0
3522: PUSH
3523: EMPTY
3524: LIST
3525: LIST
3526: PUSH
3527: LD_VAR 0 2
3531: ARRAY
3532: ST_TO_ADDR
// neng := neng - nmech ;
3533: LD_ADDR_LOC 5
3537: PUSH
3538: LD_LOC 5
3542: PUSH
3543: LD_LOC 7
3547: MINUS
3548: ST_TO_ADDR
// if ( neng < 1 ) then
3549: LD_LOC 5
3553: PUSH
3554: LD_INT 1
3556: LESS
3557: IFFALSE 3567
// neng := 1 ;
3559: LD_ADDR_LOC 5
3563: PUSH
3564: LD_INT 1
3566: ST_TO_ADDR
// end ;
3567: LD_VAR 0 1
3571: RET
// starting var i ; begin enable_human_prediction := true ;
3572: LD_ADDR_OWVAR 51
3576: PUSH
3577: LD_INT 1
3579: ST_TO_ADDR
// mp_selectmsg := true ;
3580: LD_ADDR_OWVAR 13
3584: PUSH
3585: LD_INT 1
3587: ST_TO_ADDR
// read_multiplayer_and_game_parameters ;
3588: CALL 0 0 0
// init_map ;
3592: CALL 981 0 0
// init_respawning ;
3596: CALL 3687 0 0
// set_shared_visions_and_alliances ;
3600: CALL 1423 0 0
// ResetFog ;
3604: CALL_OW 335
// prepare_sides ;
3608: CALL 3289 0 0
// ShowTimer ;
3612: CALL 4908 0 0
// music_nat := Side_Nations [ your_side ] ;
3616: LD_ADDR_OWVAR 71
3620: PUSH
3621: LD_EXP 24
3625: PUSH
3626: LD_OWVAR 2
3630: ARRAY
3631: ST_TO_ADDR
// SibContaminated = 0 ;
3632: LD_ADDR_EXP 36
3636: PUSH
3637: LD_INT 0
3639: ST_TO_ADDR
// CenterNowOnXY ( start_def [ Side_Positions [ your_side ] ] [ 1 ] , start_def [ Side_Positions [ your_side ] ] [ 2 ] ) ;
3640: LD_EXP 29
3644: PUSH
3645: LD_EXP 23
3649: PUSH
3650: LD_OWVAR 2
3654: ARRAY
3655: ARRAY
3656: PUSH
3657: LD_INT 1
3659: ARRAY
3660: PPUSH
3661: LD_EXP 29
3665: PUSH
3666: LD_EXP 23
3670: PUSH
3671: LD_OWVAR 2
3675: ARRAY
3676: ARRAY
3677: PUSH
3678: LD_INT 2
3680: ARRAY
3681: PPUSH
3682: CALL_OW 86
// end ; end_of_file
3686: END
// var respawn , inqueue ; export function init_respawning ; begin
3687: LD_INT 0
3689: PPUSH
// respawn := Rand ( 1 , 8 ) ;
3690: LD_ADDR_LOC 9
3694: PUSH
3695: LD_INT 1
3697: PPUSH
3698: LD_INT 8
3700: PPUSH
3701: CALL_OW 12
3705: ST_TO_ADDR
// inqueue := [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ;
3706: LD_ADDR_LOC 10
3710: PUSH
3711: LD_INT 0
3713: PUSH
3714: LD_INT 0
3716: PUSH
3717: LD_INT 0
3719: PUSH
3720: LD_INT 0
3722: PUSH
3723: LD_INT 0
3725: PUSH
3726: LD_INT 0
3728: PUSH
3729: LD_INT 0
3731: PUSH
3732: LD_INT 0
3734: PUSH
3735: EMPTY
3736: LIST
3737: LIST
3738: LIST
3739: LIST
3740: LIST
3741: LIST
3742: LIST
3743: LIST
3744: ST_TO_ADDR
// end ;
3745: LD_VAR 0 1
3749: RET
// every 0 0$1 + 0 0$0.5 do var n , dep , aktresp ;
3750: GO 3752
3752: DISABLE
3753: LD_INT 0
3755: PPUSH
3756: PPUSH
3757: PPUSH
// begin if respawning_time_max = 0 then
3758: LD_EXP 20
3762: PUSH
3763: LD_INT 0
3765: EQUAL
3766: IFFALSE 3770
// exit ;
3768: GO 4175
// if respawn = 8 then
3770: LD_LOC 9
3774: PUSH
3775: LD_INT 8
3777: EQUAL
3778: IFFALSE 3790
// respawn := 1 else
3780: LD_ADDR_LOC 9
3784: PUSH
3785: LD_INT 1
3787: ST_TO_ADDR
3788: GO 3804
// respawn := respawn + 1 ;
3790: LD_ADDR_LOC 9
3794: PUSH
3795: LD_LOC 9
3799: PUSH
3800: LD_INT 1
3802: PLUS
3803: ST_TO_ADDR
// if Side_Positions [ respawn ] and not inqueue [ respawn ] then
3804: LD_EXP 23
3808: PUSH
3809: LD_LOC 9
3813: ARRAY
3814: PUSH
3815: LD_LOC 10
3819: PUSH
3820: LD_LOC 9
3824: ARRAY
3825: NOT
3826: AND
3827: IFFALSE 4174
// begin n := FilterAllUnits ( [ [ f_type , unit_human ] , [ f_side , respawn ] , f_not , [ f_nation , nation_nature ] ] ) ;
3829: LD_ADDR_VAR 0 1
3833: PUSH
3834: LD_INT 21
3836: PUSH
3837: LD_INT 1
3839: PUSH
3840: EMPTY
3841: LIST
3842: LIST
3843: PUSH
3844: LD_INT 22
3846: PUSH
3847: LD_LOC 9
3851: PUSH
3852: EMPTY
3853: LIST
3854: LIST
3855: PUSH
3856: LD_INT 3
3858: PUSH
3859: LD_INT 23
3861: PUSH
3862: LD_INT 0
3864: PUSH
3865: EMPTY
3866: LIST
3867: LIST
3868: PUSH
3869: EMPTY
3870: LIST
3871: LIST
3872: LIST
3873: LIST
3874: PPUSH
3875: CALL_OW 69
3879: ST_TO_ADDR
// if n < number_of_people then
3880: LD_VAR 0 1
3884: PUSH
3885: LD_EXP 11
3889: LESS
3890: IFFALSE 4171
// begin dep := FilterAllUnits ( [ [ f_type , unit_building ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] , [ f_ok ] , [ f_side , respawn ] ] ) ;
3892: LD_ADDR_VAR 0 2
3896: PUSH
3897: LD_INT 21
3899: PUSH
3900: LD_INT 3
3902: PUSH
3903: EMPTY
3904: LIST
3905: LIST
3906: PUSH
3907: LD_INT 2
3909: PUSH
3910: LD_INT 30
3912: PUSH
3913: LD_INT 0
3915: PUSH
3916: EMPTY
3917: LIST
3918: LIST
3919: PUSH
3920: LD_INT 30
3922: PUSH
3923: LD_INT 1
3925: PUSH
3926: EMPTY
3927: LIST
3928: LIST
3929: PUSH
3930: EMPTY
3931: LIST
3932: LIST
3933: LIST
3934: PUSH
3935: LD_INT 50
3937: PUSH
3938: EMPTY
3939: LIST
3940: PUSH
3941: LD_INT 22
3943: PUSH
3944: LD_LOC 9
3948: PUSH
3949: EMPTY
3950: LIST
3951: LIST
3952: PUSH
3953: EMPTY
3954: LIST
3955: LIST
3956: LIST
3957: LIST
3958: PPUSH
3959: CALL_OW 69
3963: ST_TO_ADDR
// if dep then
3964: LD_VAR 0 2
3968: IFFALSE 4168
// begin aktresp := respawn ;
3970: LD_ADDR_VAR 0 3
3974: PUSH
3975: LD_LOC 9
3979: ST_TO_ADDR
// inqueue := Replace ( inqueue , aktresp , true ) ;
3980: LD_ADDR_LOC 10
3984: PUSH
3985: LD_LOC 10
3989: PPUSH
3990: LD_VAR 0 3
3994: PPUSH
3995: LD_INT 1
3997: PPUSH
3998: CALL_OW 1
4002: ST_TO_ADDR
// enable ;
4003: ENABLE
// wait ( rand ( respawning_time_min , respawning_time_max ) ) ;
4004: LD_EXP 19
4008: PPUSH
4009: LD_EXP 20
4013: PPUSH
4014: CALL_OW 12
4018: PPUSH
4019: CALL_OW 67
// inqueue := Replace ( inqueue , aktresp , false ) ;
4023: LD_ADDR_LOC 10
4027: PUSH
4028: LD_LOC 10
4032: PPUSH
4033: LD_VAR 0 3
4037: PPUSH
4038: LD_INT 0
4040: PPUSH
4041: CALL_OW 1
4045: ST_TO_ADDR
// hc_name :=  ;
4046: LD_ADDR_OWVAR 26
4050: PUSH
4051: LD_STRING 
4053: ST_TO_ADDR
// hc_importance := 0 ;
4054: LD_ADDR_OWVAR 32
4058: PUSH
4059: LD_INT 0
4061: ST_TO_ADDR
// PrepareHuman ( 0 , 0 , skill_level div 2 ) ;
4062: LD_INT 0
4064: PPUSH
4065: LD_INT 0
4067: PPUSH
4068: LD_EXP 12
4072: PUSH
4073: LD_INT 2
4075: DIV
4076: PPUSH
4077: CALL_OW 380
// uc_nation := Side_Nations [ aktresp ] ;
4081: LD_ADDR_OWVAR 21
4085: PUSH
4086: LD_EXP 24
4090: PUSH
4091: LD_VAR 0 3
4095: ARRAY
4096: ST_TO_ADDR
// uc_side := aktresp ;
4097: LD_ADDR_OWVAR 20
4101: PUSH
4102: LD_VAR 0 3
4106: ST_TO_ADDR
// dep := dep [ Rand ( 1 , dep ) ] ;
4107: LD_ADDR_VAR 0 2
4111: PUSH
4112: LD_VAR 0 2
4116: PUSH
4117: LD_INT 1
4119: PPUSH
4120: LD_VAR 0 2
4124: PPUSH
4125: CALL_OW 12
4129: ARRAY
4130: ST_TO_ADDR
// PlaceUnitXYR ( CreateHuman , GetX ( dep ) , GetY ( dep ) , 7 , true ) ;
4131: CALL_OW 44
4135: PPUSH
4136: LD_VAR 0 2
4140: PPUSH
4141: CALL_OW 250
4145: PPUSH
4146: LD_VAR 0 2
4150: PPUSH
4151: CALL_OW 251
4155: PPUSH
4156: LD_INT 7
4158: PPUSH
4159: LD_INT 1
4161: PPUSH
4162: CALL_OW 50
// end else
4166: GO 4169
// enable ;
4168: ENABLE
// end else
4169: GO 4172
// enable ;
4171: ENABLE
// end else
4172: GO 4175
// enable ;
4174: ENABLE
// end ; end_of_file
4175: PPOPN 3
4177: END
// every 1 1$0 + 0 0$0.3 marked 10 do
4178: GO 4180
4180: DISABLE
// begin CreateCratesAnywhere ( Rand ( 4 , 5 ) , true ) ;
4181: LD_INT 4
4183: PPUSH
4184: LD_INT 5
4186: PPUSH
4187: CALL_OW 12
4191: PPUSH
4192: LD_INT 1
4194: PPUSH
4195: CALL_OW 57
// enable ;
4199: ENABLE
// end ;
4200: END
// every 0 0$1 + 0 0$0.6 marked 10 do var i , amount ;
4201: GO 4203
4203: DISABLE
4204: LD_INT 0
4206: PPUSH
4207: PPUSH
// begin case tick of 1 .. 1 1$0 :
4208: LD_OWVAR 1
4212: PUSH
4213: LD_INT 1
4215: DOUBLE
4216: GREATEREQUAL
4217: IFFALSE 4225
4219: LD_INT 2100
4221: DOUBLE
4222: LESSEQUAL
4223: IFTRUE 4227
4225: GO 4255
4227: POP
// Wait ( shipments_density / 100 * Rand ( 0 0$10 , 0 0$30 ) ) ; 1 1$0 + 1 .. 5 5$0 :
4228: LD_EXP 15
4232: PUSH
4233: LD_INT 100
4235: DIVREAL
4236: PUSH
4237: LD_INT 350
4239: PPUSH
4240: LD_INT 1050
4242: PPUSH
4243: CALL_OW 12
4247: MUL
4248: PPUSH
4249: CALL_OW 67
4253: GO 4557
4255: LD_INT 2100
4257: PUSH
4258: LD_INT 1
4260: PLUS
4261: DOUBLE
4262: GREATEREQUAL
4263: IFFALSE 4271
4265: LD_INT 10500
4267: DOUBLE
4268: LESSEQUAL
4269: IFTRUE 4273
4271: GO 4301
4273: POP
// Wait ( shipments_density / 100 * Rand ( 0 0$30 , 0 0$45 ) ) ; 5 5$0 + 1 .. 10 10$0 :
4274: LD_EXP 15
4278: PUSH
4279: LD_INT 100
4281: DIVREAL
4282: PUSH
4283: LD_INT 1050
4285: PPUSH
4286: LD_INT 1575
4288: PPUSH
4289: CALL_OW 12
4293: MUL
4294: PPUSH
4295: CALL_OW 67
4299: GO 4557
4301: LD_INT 10500
4303: PUSH
4304: LD_INT 1
4306: PLUS
4307: DOUBLE
4308: GREATEREQUAL
4309: IFFALSE 4317
4311: LD_INT 21000
4313: DOUBLE
4314: LESSEQUAL
4315: IFTRUE 4319
4317: GO 4347
4319: POP
// Wait ( shipments_density / 100 * Rand ( 0 0$45 , 1 1$0 ) ) ; 10 10$0 + 1 .. 20 20$0 :
4320: LD_EXP 15
4324: PUSH
4325: LD_INT 100
4327: DIVREAL
4328: PUSH
4329: LD_INT 1575
4331: PPUSH
4332: LD_INT 2100
4334: PPUSH
4335: CALL_OW 12
4339: MUL
4340: PPUSH
4341: CALL_OW 67
4345: GO 4557
4347: LD_INT 21000
4349: PUSH
4350: LD_INT 1
4352: PLUS
4353: DOUBLE
4354: GREATEREQUAL
4355: IFFALSE 4363
4357: LD_INT 42000
4359: DOUBLE
4360: LESSEQUAL
4361: IFTRUE 4365
4363: GO 4393
4365: POP
// Wait ( shipments_density / 100 * Rand ( 1 1$0 , 1 1$15 ) ) ; 20 20$0 + 1 .. 30 30$0 :
4366: LD_EXP 15
4370: PUSH
4371: LD_INT 100
4373: DIVREAL
4374: PUSH
4375: LD_INT 2100
4377: PPUSH
4378: LD_INT 2625
4380: PPUSH
4381: CALL_OW 12
4385: MUL
4386: PPUSH
4387: CALL_OW 67
4391: GO 4557
4393: LD_INT 42000
4395: PUSH
4396: LD_INT 1
4398: PLUS
4399: DOUBLE
4400: GREATEREQUAL
4401: IFFALSE 4409
4403: LD_INT 63000
4405: DOUBLE
4406: LESSEQUAL
4407: IFTRUE 4411
4409: GO 4439
4411: POP
// Wait ( shipments_density / 100 * Rand ( 1 1$15 , 1 1$30 ) ) ; 30 30$0 + 1 .. 50 50$0 :
4412: LD_EXP 15
4416: PUSH
4417: LD_INT 100
4419: DIVREAL
4420: PUSH
4421: LD_INT 2625
4423: PPUSH
4424: LD_INT 3150
4426: PPUSH
4427: CALL_OW 12
4431: MUL
4432: PPUSH
4433: CALL_OW 67
4437: GO 4557
4439: LD_INT 63000
4441: PUSH
4442: LD_INT 1
4444: PLUS
4445: DOUBLE
4446: GREATEREQUAL
4447: IFFALSE 4455
4449: LD_INT 105000
4451: DOUBLE
4452: LESSEQUAL
4453: IFTRUE 4457
4455: GO 4485
4457: POP
// Wait ( shipments_density / 100 * Rand ( 1 1$30 , 1 1$45 ) ) ; 50 50$0 + 1 .. 300 300$0 :
4458: LD_EXP 15
4462: PUSH
4463: LD_INT 100
4465: DIVREAL
4466: PUSH
4467: LD_INT 3150
4469: PPUSH
4470: LD_INT 3675
4472: PPUSH
4473: CALL_OW 12
4477: MUL
4478: PPUSH
4479: CALL_OW 67
4483: GO 4557
4485: LD_INT 105000
4487: PUSH
4488: LD_INT 1
4490: PLUS
4491: DOUBLE
4492: GREATEREQUAL
4493: IFFALSE 4501
4495: LD_INT 630000
4497: DOUBLE
4498: LESSEQUAL
4499: IFTRUE 4503
4501: GO 4531
4503: POP
// Wait ( shipments_density / 100 * Rand ( 1 1$45 , 2 2$0 ) ) ; else
4504: LD_EXP 15
4508: PUSH
4509: LD_INT 100
4511: DIVREAL
4512: PUSH
4513: LD_INT 3675
4515: PPUSH
4516: LD_INT 4200
4518: PPUSH
4519: CALL_OW 12
4523: MUL
4524: PPUSH
4525: CALL_OW 67
4529: GO 4557
4531: POP
// Wait ( shipments_density / 100 * Rand ( 2 2$0 , 2 2$30 ) ) ; end ;
4532: LD_EXP 15
4536: PUSH
4537: LD_INT 100
4539: DIVREAL
4540: PUSH
4541: LD_INT 4200
4543: PPUSH
4544: LD_INT 5250
4546: PPUSH
4547: CALL_OW 12
4551: MUL
4552: PPUSH
4553: CALL_OW 67
// amount := Rand ( 3 , 5 ) ;
4557: LD_ADDR_VAR 0 2
4561: PUSH
4562: LD_INT 3
4564: PPUSH
4565: LD_INT 5
4567: PPUSH
4568: CALL_OW 12
4572: ST_TO_ADDR
// for i in ( Side_Positions diff [ 0 ] ) do
4573: LD_ADDR_VAR 0 1
4577: PUSH
4578: LD_EXP 23
4582: PUSH
4583: LD_INT 0
4585: PUSH
4586: EMPTY
4587: LIST
4588: DIFF
4589: PUSH
4590: FOR_IN
4591: IFFALSE 4640
// CreateCratesXYR ( amount , start_def [ i ] [ 1 ] , start_def [ i ] [ 2 ] , 20 , true ) ;
4593: LD_VAR 0 2
4597: PPUSH
4598: LD_EXP 29
4602: PUSH
4603: LD_VAR 0 1
4607: ARRAY
4608: PUSH
4609: LD_INT 1
4611: ARRAY
4612: PPUSH
4613: LD_EXP 29
4617: PUSH
4618: LD_VAR 0 1
4622: ARRAY
4623: PUSH
4624: LD_INT 2
4626: ARRAY
4627: PPUSH
4628: LD_INT 20
4630: PPUSH
4631: LD_INT 1
4633: PPUSH
4634: CALL_OW 56
4638: GO 4590
4640: POP
4641: POP
// enable ;
4642: ENABLE
// end ; end_of_file
4643: PPOPN 2
4645: END
// on BuildingStarted ( b , u ) do begin if GetBType ( b ) in [ b_depot , b_warehouse ] then
4646: LD_VAR 0 1
4650: PPUSH
4651: CALL_OW 266
4655: PUSH
4656: LD_INT 0
4658: PUSH
4659: LD_INT 1
4661: PUSH
4662: EMPTY
4663: LIST
4664: LIST
4665: IN
4666: IFFALSE 4691
// SetBName ( b , @ & GetSide ( b ) ) ;
4668: LD_VAR 0 1
4672: PPUSH
4673: LD_STRING @
4675: PUSH
4676: LD_VAR 0 1
4680: PPUSH
4681: CALL_OW 255
4685: STR
4686: PPUSH
4687: CALL_OW 500
// end ;
4691: PPOPN 2
4693: END
// on BuildingCaptured ( b , o , e ) do begin if GetBType ( b ) in [ b_depot , b_warehouse ] then
4694: LD_VAR 0 1
4698: PPUSH
4699: CALL_OW 266
4703: PUSH
4704: LD_INT 0
4706: PUSH
4707: LD_INT 1
4709: PUSH
4710: EMPTY
4711: LIST
4712: LIST
4713: IN
4714: IFFALSE 4739
// SetBName ( b , @ & GetSide ( b ) ) ;
4716: LD_VAR 0 1
4720: PPUSH
4721: LD_STRING @
4723: PUSH
4724: LD_VAR 0 1
4728: PPUSH
4729: CALL_OW 255
4733: STR
4734: PPUSH
4735: CALL_OW 500
// end ;
4739: PPOPN 3
4741: END
// on SibDepositContaminated ( un , x , y ) do begin if un in FilterAllUnits ( [ [ f_class , 4 ] ] ) then
4742: LD_VAR 0 1
4746: PUSH
4747: LD_INT 25
4749: PUSH
4750: LD_INT 4
4752: PUSH
4753: EMPTY
4754: LIST
4755: LIST
4756: PUSH
4757: EMPTY
4758: LIST
4759: PPUSH
4760: CALL_OW 69
4764: IN
4765: IFFALSE 4775
// begin SibContaminated = 1 ;
4767: LD_ADDR_EXP 36
4771: PUSH
4772: LD_INT 1
4774: ST_TO_ADDR
// end ; end ; end_of_file
4775: PPOPN 3
4777: END
// every 0 0$1 do var i ;
4778: GO 4780
4780: DISABLE
4781: LD_INT 0
4783: PPUSH
// begin enable ;
4784: ENABLE
// for i = 1 to Side_positions do
4785: LD_ADDR_VAR 0 1
4789: PUSH
4790: DOUBLE
4791: LD_INT 1
4793: DEC
4794: ST_TO_ADDR
4795: LD_EXP 23
4799: PUSH
4800: FOR_TO
4801: IFFALSE 4903
// if Side_positions [ i ] and ( i <> your_side ) and not MultiplayerSideAlive ( i ) and Side_Teams [ i ] and ( Side_Teams [ i ] = Side_Teams [ your_side ] ) then
4803: LD_EXP 23
4807: PUSH
4808: LD_VAR 0 1
4812: ARRAY
4813: PUSH
4814: LD_VAR 0 1
4818: PUSH
4819: LD_OWVAR 2
4823: NONEQUAL
4824: AND
4825: PUSH
4826: LD_VAR 0 1
4830: PPUSH
4831: CALL_OW 108
4835: NOT
4836: AND
4837: PUSH
4838: LD_EXP 21
4842: PUSH
4843: LD_VAR 0 1
4847: ARRAY
4848: AND
4849: PUSH
4850: LD_EXP 21
4854: PUSH
4855: LD_VAR 0 1
4859: ARRAY
4860: PUSH
4861: LD_EXP 21
4865: PUSH
4866: LD_OWVAR 2
4870: ARRAY
4871: EQUAL
4872: AND
4873: IFFALSE 4901
// SetSide ( FilterAllUnits ( [ f_side , i ] ) , your_side ) ;
4875: LD_INT 22
4877: PUSH
4878: LD_VAR 0 1
4882: PUSH
4883: EMPTY
4884: LIST
4885: LIST
4886: PPUSH
4887: CALL_OW 69
4891: PPUSH
4892: LD_OWVAR 2
4896: PPUSH
4897: CALL_OW 235
4901: GO 4800
4903: POP
4904: POP
// end ; end_of_file
4905: PPOPN 1
4907: END
// export ExtraStrings ; export function ShowTimer ; var AllStrings ; begin
4908: LD_INT 0
4910: PPUSH
4911: PPUSH
// AllStrings := [ #Multi1x1-Time , tick ] ;
4912: LD_ADDR_VAR 0 2
4916: PUSH
4917: LD_STRING #Multi1x1-Time
4919: PUSH
4920: LD_OWVAR 1
4924: PUSH
4925: EMPTY
4926: LIST
4927: LIST
4928: ST_TO_ADDR
// if ( ExtraStrings ) then
4929: LD_EXP 37
4933: IFFALSE 4955
// AllStrings := AllStrings ^  ^ ExtraStrings ;
4935: LD_ADDR_VAR 0 2
4939: PUSH
4940: LD_VAR 0 2
4944: PUSH
4945: LD_STRING 
4947: ADD
4948: PUSH
4949: LD_EXP 37
4953: ADD
4954: ST_TO_ADDR
// Display_Strings := AllStrings ;
4955: LD_ADDR_OWVAR 47
4959: PUSH
4960: LD_VAR 0 2
4964: ST_TO_ADDR
// end ;
4965: LD_VAR 0 1
4969: RET
// every 0 0$1 do
4970: GO 4972
4972: DISABLE
// begin ShowTimer ;
4973: CALL 4908 0 0
// enable ;
4977: ENABLE
// end ; end_of_file
4978: END
// every 0 0$1 trigger SibContaminated = 1 do
4979: LD_EXP 36
4983: PUSH
4984: LD_INT 1
4986: EQUAL
4987: IFFALSE 4996
4989: GO 4991
4991: DISABLE
// begin YouWinInMultiplayer ;
4992: CALL_OW 106
// end ; end_of_file
4996: END
// function apeman_init ; begin
4997: LD_INT 0
4999: PPUSH
// uc_side := 0 ;
5000: LD_ADDR_OWVAR 20
5004: PUSH
5005: LD_INT 0
5007: ST_TO_ADDR
// uc_nation := nation_nature ;
5008: LD_ADDR_OWVAR 21
5012: PUSH
5013: LD_INT 0
5015: ST_TO_ADDR
// hc_class := class_apeman ;
5016: LD_ADDR_OWVAR 28
5020: PUSH
5021: LD_INT 12
5023: ST_TO_ADDR
// hc_basic_skills := [ 1 , 1 , 1 , 1 ] ;
5024: LD_ADDR_OWVAR 30
5028: PUSH
5029: LD_INT 1
5031: PUSH
5032: LD_INT 1
5034: PUSH
5035: LD_INT 1
5037: PUSH
5038: LD_INT 1
5040: PUSH
5041: EMPTY
5042: LIST
5043: LIST
5044: LIST
5045: LIST
5046: ST_TO_ADDR
// hc_skills := [ 1 , 1 , 1 , 1 ] ;
5047: LD_ADDR_OWVAR 31
5051: PUSH
5052: LD_INT 1
5054: PUSH
5055: LD_INT 1
5057: PUSH
5058: LD_INT 1
5060: PUSH
5061: LD_INT 1
5063: PUSH
5064: EMPTY
5065: LIST
5066: LIST
5067: LIST
5068: LIST
5069: ST_TO_ADDR
// hc_attr := [ 10 , 12 ] ;
5070: LD_ADDR_OWVAR 29
5074: PUSH
5075: LD_INT 10
5077: PUSH
5078: LD_INT 12
5080: PUSH
5081: EMPTY
5082: LIST
5083: LIST
5084: ST_TO_ADDR
// hc_sex := sex_male ;
5085: LD_ADDR_OWVAR 27
5089: PUSH
5090: LD_INT 1
5092: ST_TO_ADDR
// hc_importance := 0 ;
5093: LD_ADDR_OWVAR 32
5097: PUSH
5098: LD_INT 0
5100: ST_TO_ADDR
// hc_agressivity := Rand ( - 20 , 20 ) ;
5101: LD_ADDR_OWVAR 35
5105: PUSH
5106: LD_INT 20
5108: NEG
5109: PPUSH
5110: LD_INT 20
5112: PPUSH
5113: CALL_OW 12
5117: ST_TO_ADDR
// end ;
5118: LD_VAR 0 1
5122: RET
// function prepare_apemen ; var i , j , un , ape , first , d1 , d2 ; begin
5123: LD_INT 0
5125: PPUSH
5126: PPUSH
5127: PPUSH
5128: PPUSH
5129: PPUSH
5130: PPUSH
5131: PPUSH
5132: PPUSH
// ape := 0 ;
5133: LD_ADDR_VAR 0 5
5137: PUSH
5138: LD_INT 0
5140: ST_TO_ADDR
// repeat Wait ( ( ape + 1 ) * Rand ( 0 0$10 , 1 1$0 ) ) ;
5141: LD_VAR 0 5
5145: PUSH
5146: LD_INT 1
5148: PLUS
5149: PUSH
5150: LD_INT 350
5152: PPUSH
5153: LD_INT 2100
5155: PPUSH
5156: CALL_OW 12
5160: MUL
5161: PPUSH
5162: CALL_OW 67
// apeman_init ;
5166: CALL 4997 0 0
// PlaceUnitArea ( CreateHuman , Base1ApeArea , false ) ;
5170: CALL_OW 44
5174: PPUSH
5175: LD_INT 8
5177: PPUSH
5178: LD_INT 0
5180: PPUSH
5181: CALL_OW 49
// PlaceUnitArea ( CreateHuman , Base2ApeArea , false ) ;
5185: CALL_OW 44
5189: PPUSH
5190: LD_INT 9
5192: PPUSH
5193: LD_INT 0
5195: PPUSH
5196: CALL_OW 49
// PlaceUnitArea ( CreateHuman , Base3ApeArea , false ) ;
5200: CALL_OW 44
5204: PPUSH
5205: LD_INT 6
5207: PPUSH
5208: LD_INT 0
5210: PPUSH
5211: CALL_OW 49
// PlaceUnitArea ( CreateHuman , Base4ApeArea , false ) ;
5215: CALL_OW 44
5219: PPUSH
5220: LD_INT 10
5222: PPUSH
5223: LD_INT 0
5225: PPUSH
5226: CALL_OW 49
// PlaceUnitArea ( CreateHuman , Base5ApeArea , false ) ;
5230: CALL_OW 44
5234: PPUSH
5235: LD_INT 7
5237: PPUSH
5238: LD_INT 0
5240: PPUSH
5241: CALL_OW 49
// Wait ( 3 ) ;
5245: LD_INT 3
5247: PPUSH
5248: CALL_OW 67
// ape := ape + 1 ;
5252: LD_ADDR_VAR 0 5
5256: PUSH
5257: LD_VAR 0 5
5261: PUSH
5262: LD_INT 1
5264: PLUS
5265: ST_TO_ADDR
// until ape >= amount_of_apemen ;
5266: LD_VAR 0 5
5270: PUSH
5271: LD_EXP 17
5275: GREATEREQUAL
5276: IFFALSE 5141
// end ;
5278: LD_VAR 0 1
5282: RET
// every 0 0$15 do
5283: GO 5285
5285: DISABLE
// begin prepare_apemen ;
5286: CALL 5123 0 0
// end ; end_of_file
5290: END
// every 0 0$3 do
5291: GO 5293
5293: DISABLE
// begin InitHack ( 3 ) ;
5294: LD_INT 3
5296: PPUSH
5297: CALL 5313 0 1
// end ;
5301: END
// every 1 do
5302: GO 5304
5304: DISABLE
// begin InitHack ( 3 ) ;
5305: LD_INT 3
5307: PPUSH
5308: CALL 5313 0 1
// end ;
5312: END
// export vx_limit , vx_capture , vx_list , us_hack ; export function InitHack ( limit ) ; var i , tmp ; begin
5313: LD_INT 0
5315: PPUSH
5316: PPUSH
5317: PPUSH
// us_hack = 99 ;
5318: LD_ADDR_EXP 41
5322: PUSH
5323: LD_INT 99
5325: ST_TO_ADDR
// vx_list = [ ] ;
5326: LD_ADDR_EXP 40
5330: PUSH
5331: EMPTY
5332: ST_TO_ADDR
// vx_limit = limit ;
5333: LD_ADDR_EXP 38
5337: PUSH
5338: LD_VAR 0 1
5342: ST_TO_ADDR
// vx_capture = [ ] ;
5343: LD_ADDR_EXP 39
5347: PUSH
5348: EMPTY
5349: ST_TO_ADDR
// tmp := FilterAllUnits ( [ f_weapon , us_hack ] ) ;
5350: LD_ADDR_VAR 0 4
5354: PUSH
5355: LD_INT 34
5357: PUSH
5358: LD_EXP 41
5362: PUSH
5363: EMPTY
5364: LIST
5365: LIST
5366: PPUSH
5367: CALL_OW 69
5371: ST_TO_ADDR
// for i = 1 to tmp do
5372: LD_ADDR_VAR 0 3
5376: PUSH
5377: DOUBLE
5378: LD_INT 1
5380: DEC
5381: ST_TO_ADDR
5382: LD_VAR 0 4
5386: PUSH
5387: FOR_TO
5388: IFFALSE 5455
// begin vx_list := vx_list ^ [ [ tmp [ i ] , [ ] ] ] ;
5390: LD_ADDR_EXP 40
5394: PUSH
5395: LD_EXP 40
5399: PUSH
5400: LD_VAR 0 4
5404: PUSH
5405: LD_VAR 0 3
5409: ARRAY
5410: PUSH
5411: EMPTY
5412: PUSH
5413: EMPTY
5414: LIST
5415: LIST
5416: PUSH
5417: EMPTY
5418: LIST
5419: ADD
5420: ST_TO_ADDR
// vx_capture := vx_capture ^ [ [ tmp [ i ] , 0 ] ] ;
5421: LD_ADDR_EXP 39
5425: PUSH
5426: LD_EXP 39
5430: PUSH
5431: LD_VAR 0 4
5435: PUSH
5436: LD_VAR 0 3
5440: ARRAY
5441: PUSH
5442: LD_INT 0
5444: PUSH
5445: EMPTY
5446: LIST
5447: LIST
5448: PUSH
5449: EMPTY
5450: LIST
5451: ADD
5452: ST_TO_ADDR
// end ;
5453: GO 5387
5455: POP
5456: POP
// end ;
5457: LD_VAR 0 2
5461: RET
// export function AddVeh ( veh , e , s ) ; var i , tmp , tmp2 ; begin
5462: LD_INT 0
5464: PPUSH
5465: PPUSH
5466: PPUSH
5467: PPUSH
// for i = 1 to vx_list do
5468: LD_ADDR_VAR 0 5
5472: PUSH
5473: DOUBLE
5474: LD_INT 1
5476: DEC
5477: ST_TO_ADDR
5478: LD_EXP 40
5482: PUSH
5483: FOR_TO
5484: IFFALSE 5624
// if vx_list [ i ] [ 1 ] = veh then
5486: LD_EXP 40
5490: PUSH
5491: LD_VAR 0 5
5495: ARRAY
5496: PUSH
5497: LD_INT 1
5499: ARRAY
5500: PUSH
5501: LD_VAR 0 1
5505: EQUAL
5506: IFFALSE 5622
// begin tmp2 := Insert ( vx_list [ i ] [ 2 ] , vx_list [ i ] [ 2 ] + 1 , [ e , s ] ) ;
5508: LD_ADDR_VAR 0 7
5512: PUSH
5513: LD_EXP 40
5517: PUSH
5518: LD_VAR 0 5
5522: ARRAY
5523: PUSH
5524: LD_INT 2
5526: ARRAY
5527: PPUSH
5528: LD_EXP 40
5532: PUSH
5533: LD_VAR 0 5
5537: ARRAY
5538: PUSH
5539: LD_INT 2
5541: ARRAY
5542: PUSH
5543: LD_INT 1
5545: PLUS
5546: PPUSH
5547: LD_VAR 0 2
5551: PUSH
5552: LD_VAR 0 3
5556: PUSH
5557: EMPTY
5558: LIST
5559: LIST
5560: PPUSH
5561: CALL_OW 2
5565: ST_TO_ADDR
// tmp := Replace ( vx_list [ i ] , 2 , tmp2 ) ;
5566: LD_ADDR_VAR 0 6
5570: PUSH
5571: LD_EXP 40
5575: PUSH
5576: LD_VAR 0 5
5580: ARRAY
5581: PPUSH
5582: LD_INT 2
5584: PPUSH
5585: LD_VAR 0 7
5589: PPUSH
5590: CALL_OW 1
5594: ST_TO_ADDR
// vx_list := Replace ( vx_list , i , tmp ) ;
5595: LD_ADDR_EXP 40
5599: PUSH
5600: LD_EXP 40
5604: PPUSH
5605: LD_VAR 0 5
5609: PPUSH
5610: LD_VAR 0 6
5614: PPUSH
5615: CALL_OW 1
5619: ST_TO_ADDR
// break ;
5620: GO 5624
// end ;
5622: GO 5483
5624: POP
5625: POP
// end ;
5626: LD_VAR 0 4
5630: RET
// export function ChangeCapture ( veh , m ) ; var i , tmp ; begin
5631: LD_INT 0
5633: PPUSH
5634: PPUSH
5635: PPUSH
// for i = 1 to vx_capture do
5636: LD_ADDR_VAR 0 4
5640: PUSH
5641: DOUBLE
5642: LD_INT 1
5644: DEC
5645: ST_TO_ADDR
5646: LD_EXP 39
5650: PUSH
5651: FOR_TO
5652: IFFALSE 5750
// if vx_capture [ i ] [ 1 ] = veh then
5654: LD_EXP 39
5658: PUSH
5659: LD_VAR 0 4
5663: ARRAY
5664: PUSH
5665: LD_INT 1
5667: ARRAY
5668: PUSH
5669: LD_VAR 0 1
5673: EQUAL
5674: IFFALSE 5748
// begin tmp := Replace ( vx_capture [ i ] , 2 , vx_capture [ i ] [ 2 ] + ( m ) ) ;
5676: LD_ADDR_VAR 0 5
5680: PUSH
5681: LD_EXP 39
5685: PUSH
5686: LD_VAR 0 4
5690: ARRAY
5691: PPUSH
5692: LD_INT 2
5694: PPUSH
5695: LD_EXP 39
5699: PUSH
5700: LD_VAR 0 4
5704: ARRAY
5705: PUSH
5706: LD_INT 2
5708: ARRAY
5709: PUSH
5710: LD_VAR 0 2
5714: PLUS
5715: PPUSH
5716: CALL_OW 1
5720: ST_TO_ADDR
// vx_capture := Replace ( vx_capture , i , tmp ) ;
5721: LD_ADDR_EXP 39
5725: PUSH
5726: LD_EXP 39
5730: PPUSH
5731: LD_VAR 0 4
5735: PPUSH
5736: LD_VAR 0 5
5740: PPUSH
5741: CALL_OW 1
5745: ST_TO_ADDR
// break ;
5746: GO 5750
// end ;
5748: GO 5651
5750: POP
5751: POP
// end ;
5752: LD_VAR 0 3
5756: RET
// export function DisplayHacks ( veh ) ; var i , tmp ; begin
5757: LD_INT 0
5759: PPUSH
5760: PPUSH
5761: PPUSH
// result := false ;
5762: LD_ADDR_VAR 0 2
5766: PUSH
5767: LD_INT 0
5769: ST_TO_ADDR
// for i = 1 to vx_capture do
5770: LD_ADDR_VAR 0 3
5774: PUSH
5775: DOUBLE
5776: LD_INT 1
5778: DEC
5779: ST_TO_ADDR
5780: LD_EXP 39
5784: PUSH
5785: FOR_TO
5786: IFFALSE 5834
// if vx_capture [ i ] [ 1 ] = veh then
5788: LD_EXP 39
5792: PUSH
5793: LD_VAR 0 3
5797: ARRAY
5798: PUSH
5799: LD_INT 1
5801: ARRAY
5802: PUSH
5803: LD_VAR 0 1
5807: EQUAL
5808: IFFALSE 5832
// begin result := vx_capture [ i ] [ 2 ] ;
5810: LD_ADDR_VAR 0 2
5814: PUSH
5815: LD_EXP 39
5819: PUSH
5820: LD_VAR 0 3
5824: ARRAY
5825: PUSH
5826: LD_INT 2
5828: ARRAY
5829: ST_TO_ADDR
// break ;
5830: GO 5834
// end ;
5832: GO 5785
5834: POP
5835: POP
// SetUnitDisplayNumber ( veh , result ) ;
5836: LD_VAR 0 1
5840: PPUSH
5841: LD_VAR 0 2
5845: PPUSH
5846: CALL_OW 505
// end ;
5850: LD_VAR 0 2
5854: RET
// export function GetValue ( veh , m ) ; var i ; begin
5855: LD_INT 0
5857: PPUSH
5858: PPUSH
// result := false ;
5859: LD_ADDR_VAR 0 3
5863: PUSH
5864: LD_INT 0
5866: ST_TO_ADDR
// if not veh then
5867: LD_VAR 0 1
5871: NOT
5872: IFFALSE 5878
// exit else
5874: GO 6038
5876: GO 6038
// begin case m of list :
5878: LD_VAR 0 2
5882: PUSH
5883: LD_STRING list
5885: DOUBLE
5886: EQUAL
5887: IFTRUE 5891
5889: GO 5960
5891: POP
// begin for i = 1 to vx_list do
5892: LD_ADDR_VAR 0 4
5896: PUSH
5897: DOUBLE
5898: LD_INT 1
5900: DEC
5901: ST_TO_ADDR
5902: LD_EXP 40
5906: PUSH
5907: FOR_TO
5908: IFFALSE 5956
// if vx_list [ i ] [ 1 ] = veh then
5910: LD_EXP 40
5914: PUSH
5915: LD_VAR 0 4
5919: ARRAY
5920: PUSH
5921: LD_INT 1
5923: ARRAY
5924: PUSH
5925: LD_VAR 0 1
5929: EQUAL
5930: IFFALSE 5954
// begin result := vx_list [ i ] [ 2 ] ;
5932: LD_ADDR_VAR 0 3
5936: PUSH
5937: LD_EXP 40
5941: PUSH
5942: LD_VAR 0 4
5946: ARRAY
5947: PUSH
5948: LD_INT 2
5950: ARRAY
5951: ST_TO_ADDR
// break ;
5952: GO 5956
// end ;
5954: GO 5907
5956: POP
5957: POP
// end ; capt :
5958: GO 6038
5960: LD_STRING capt
5962: DOUBLE
5963: EQUAL
5964: IFTRUE 5968
5966: GO 6037
5968: POP
// begin for i = 1 to vx_capture do
5969: LD_ADDR_VAR 0 4
5973: PUSH
5974: DOUBLE
5975: LD_INT 1
5977: DEC
5978: ST_TO_ADDR
5979: LD_EXP 39
5983: PUSH
5984: FOR_TO
5985: IFFALSE 6033
// if vx_capture [ i ] [ 1 ] = veh then
5987: LD_EXP 39
5991: PUSH
5992: LD_VAR 0 4
5996: ARRAY
5997: PUSH
5998: LD_INT 1
6000: ARRAY
6001: PUSH
6002: LD_VAR 0 1
6006: EQUAL
6007: IFFALSE 6031
// begin result := vx_capture [ i ] [ 2 ] ;
6009: LD_ADDR_VAR 0 3
6013: PUSH
6014: LD_EXP 39
6018: PUSH
6019: LD_VAR 0 4
6023: ARRAY
6024: PUSH
6025: LD_INT 2
6027: ARRAY
6028: ST_TO_ADDR
// break ;
6029: GO 6033
// end ;
6031: GO 5984
6033: POP
6034: POP
// end ; end ;
6035: GO 6038
6037: POP
// end ; end ;
6038: LD_VAR 0 3
6042: RET
// every 0 0$01 do var i , j , e , vehx , old_side ;
6043: GO 6045
6045: DISABLE
6046: LD_INT 0
6048: PPUSH
6049: PPUSH
6050: PPUSH
6051: PPUSH
6052: PPUSH
// begin enable ;
6053: ENABLE
// vehx = FilterAllUnits ( [ f_weapon , us_hack ] ) ;
6054: LD_ADDR_VAR 0 4
6058: PUSH
6059: LD_INT 34
6061: PUSH
6062: LD_EXP 41
6066: PUSH
6067: EMPTY
6068: LIST
6069: LIST
6070: PPUSH
6071: CALL_OW 69
6075: ST_TO_ADDR
// for j = 1 to vehx do
6076: LD_ADDR_VAR 0 2
6080: PUSH
6081: DOUBLE
6082: LD_INT 1
6084: DEC
6085: ST_TO_ADDR
6086: LD_VAR 0 4
6090: PUSH
6091: FOR_TO
6092: IFFALSE 6357
// begin e = FilterAllUnits ( [ [ f_enemy , GetSide ( vehx [ j ] ) ] , [ f_control , control_computer ] , [ f_not , [ f_weapon , us_hack ] ] ] ) ;
6094: LD_ADDR_VAR 0 3
6098: PUSH
6099: LD_INT 81
6101: PUSH
6102: LD_VAR 0 4
6106: PUSH
6107: LD_VAR 0 2
6111: ARRAY
6112: PPUSH
6113: CALL_OW 255
6117: PUSH
6118: EMPTY
6119: LIST
6120: LIST
6121: PUSH
6122: LD_INT 33
6124: PUSH
6125: LD_INT 3
6127: PUSH
6128: EMPTY
6129: LIST
6130: LIST
6131: PUSH
6132: LD_INT 3
6134: PUSH
6135: LD_INT 34
6137: PUSH
6138: LD_EXP 41
6142: PUSH
6143: EMPTY
6144: LIST
6145: LIST
6146: PUSH
6147: EMPTY
6148: LIST
6149: LIST
6150: PUSH
6151: EMPTY
6152: LIST
6153: LIST
6154: LIST
6155: PPUSH
6156: CALL_OW 69
6160: ST_TO_ADDR
// if not e then
6161: LD_VAR 0 3
6165: NOT
6166: IFFALSE 6170
// continue ;
6168: GO 6091
// i := NearestUnitToUnit ( e , vehx [ j ] ) ;
6170: LD_ADDR_VAR 0 1
6174: PUSH
6175: LD_VAR 0 3
6179: PPUSH
6180: LD_VAR 0 4
6184: PUSH
6185: LD_VAR 0 2
6189: ARRAY
6190: PPUSH
6191: CALL_OW 74
6195: ST_TO_ADDR
// if GetDistUnits ( vehx [ j ] , i ) <= 12 and GetValue ( vehx [ j ] , capt ) < vx_limit then
6196: LD_VAR 0 4
6200: PUSH
6201: LD_VAR 0 2
6205: ARRAY
6206: PPUSH
6207: LD_VAR 0 1
6211: PPUSH
6212: CALL_OW 296
6216: PUSH
6217: LD_INT 12
6219: LESSEQUAL
6220: PUSH
6221: LD_VAR 0 4
6225: PUSH
6226: LD_VAR 0 2
6230: ARRAY
6231: PPUSH
6232: LD_STRING capt
6234: PPUSH
6235: CALL 5855 0 2
6239: PUSH
6240: LD_EXP 38
6244: LESS
6245: AND
6246: IFFALSE 6355
// begin ChangeCapture ( vehx [ j ] , 1 ) ;
6248: LD_VAR 0 4
6252: PUSH
6253: LD_VAR 0 2
6257: ARRAY
6258: PPUSH
6259: LD_INT 1
6261: PPUSH
6262: CALL 5631 0 2
// old_side = GetSide ( i ) ;
6266: LD_ADDR_VAR 0 5
6270: PUSH
6271: LD_VAR 0 1
6275: PPUSH
6276: CALL_OW 255
6280: ST_TO_ADDR
// SetSide ( i , GetSide ( vehx [ j ] ) ) ;
6281: LD_VAR 0 1
6285: PPUSH
6286: LD_VAR 0 4
6290: PUSH
6291: LD_VAR 0 2
6295: ARRAY
6296: PPUSH
6297: CALL_OW 255
6301: PPUSH
6302: CALL_OW 235
// ComStop ( i ) ;
6306: LD_VAR 0 1
6310: PPUSH
6311: CALL_OW 141
// DisplayHacks ( vehx [ j ] ) ;
6315: LD_VAR 0 4
6319: PUSH
6320: LD_VAR 0 2
6324: ARRAY
6325: PPUSH
6326: CALL 5757 0 1
// AddVeh ( vehx [ j ] , i , old_side ) ;
6330: LD_VAR 0 4
6334: PUSH
6335: LD_VAR 0 2
6339: ARRAY
6340: PPUSH
6341: LD_VAR 0 1
6345: PPUSH
6346: LD_VAR 0 5
6350: PPUSH
6351: CALL 5462 0 3
// end ; end ;
6355: GO 6091
6357: POP
6358: POP
// end ;
6359: PPOPN 5
6361: END
// on UnitDestroyed ( un ) do var i , j , tmp , t , t2 ;
6362: LD_INT 0
6364: PPUSH
6365: PPUSH
6366: PPUSH
6367: PPUSH
6368: PPUSH
// begin if un in FilterAllUnits ( [ f_weapon , us_hack ] ) then
6369: LD_VAR 0 1
6373: PUSH
6374: LD_INT 34
6376: PUSH
6377: LD_EXP 41
6381: PUSH
6382: EMPTY
6383: LIST
6384: LIST
6385: PPUSH
6386: CALL_OW 69
6390: IN
6391: IFFALSE 6574
// begin for i = 1 to vx_list do
6393: LD_ADDR_VAR 0 2
6397: PUSH
6398: DOUBLE
6399: LD_INT 1
6401: DEC
6402: ST_TO_ADDR
6403: LD_EXP 40
6407: PUSH
6408: FOR_TO
6409: IFFALSE 6572
// if un = vx_list [ i ] [ 1 ] then
6411: LD_VAR 0 1
6415: PUSH
6416: LD_EXP 40
6420: PUSH
6421: LD_VAR 0 2
6425: ARRAY
6426: PUSH
6427: LD_INT 1
6429: ARRAY
6430: EQUAL
6431: IFFALSE 6570
// begin for j = 1 to vx_list [ i ] [ 2 ] do
6433: LD_ADDR_VAR 0 3
6437: PUSH
6438: DOUBLE
6439: LD_INT 1
6441: DEC
6442: ST_TO_ADDR
6443: LD_EXP 40
6447: PUSH
6448: LD_VAR 0 2
6452: ARRAY
6453: PUSH
6454: LD_INT 2
6456: ARRAY
6457: PUSH
6458: FOR_TO
6459: IFFALSE 6546
// begin SetSide ( vx_list [ i ] [ 2 ] [ j ] [ 1 ] , vx_list [ i ] [ 2 ] [ j ] [ 2 ] ) ;
6461: LD_EXP 40
6465: PUSH
6466: LD_VAR 0 2
6470: ARRAY
6471: PUSH
6472: LD_INT 2
6474: ARRAY
6475: PUSH
6476: LD_VAR 0 3
6480: ARRAY
6481: PUSH
6482: LD_INT 1
6484: ARRAY
6485: PPUSH
6486: LD_EXP 40
6490: PUSH
6491: LD_VAR 0 2
6495: ARRAY
6496: PUSH
6497: LD_INT 2
6499: ARRAY
6500: PUSH
6501: LD_VAR 0 3
6505: ARRAY
6506: PUSH
6507: LD_INT 2
6509: ARRAY
6510: PPUSH
6511: CALL_OW 235
// ComStop ( vx_list [ i ] [ 2 ] [ j ] [ 1 ] ) ;
6515: LD_EXP 40
6519: PUSH
6520: LD_VAR 0 2
6524: ARRAY
6525: PUSH
6526: LD_INT 2
6528: ARRAY
6529: PUSH
6530: LD_VAR 0 3
6534: ARRAY
6535: PUSH
6536: LD_INT 1
6538: ARRAY
6539: PPUSH
6540: CALL_OW 141
// end ;
6544: GO 6458
6546: POP
6547: POP
// vx_list := Delete ( vx_list , i ) ;
6548: LD_ADDR_EXP 40
6552: PUSH
6553: LD_EXP 40
6557: PPUSH
6558: LD_VAR 0 2
6562: PPUSH
6563: CALL_OW 3
6567: ST_TO_ADDR
// break ;
6568: GO 6572
// end ;
6570: GO 6408
6572: POP
6573: POP
// end ; if un in FilterAllUnits ( [ f_control , control_computer ] ) and not un in FilterAllUnits ( [ f_weapon , us_hack ] ) then
6574: LD_VAR 0 1
6578: PUSH
6579: LD_INT 33
6581: PUSH
6582: LD_INT 3
6584: PUSH
6585: EMPTY
6586: LIST
6587: LIST
6588: PPUSH
6589: CALL_OW 69
6593: IN
6594: PUSH
6595: LD_VAR 0 1
6599: PUSH
6600: LD_INT 34
6602: PUSH
6603: LD_EXP 41
6607: PUSH
6608: EMPTY
6609: LIST
6610: LIST
6611: PPUSH
6612: CALL_OW 69
6616: IN
6617: NOT
6618: AND
6619: IFFALSE 6855
// begin if isEditor = 1 then
6621: LD_OWVAR 84
6625: PUSH
6626: LD_INT 1
6628: EQUAL
6629: IFFALSE 6641
// display_strings := un ;
6631: LD_ADDR_OWVAR 47
6635: PUSH
6636: LD_VAR 0 1
6640: ST_TO_ADDR
// for i = 1 to vx_list do
6641: LD_ADDR_VAR 0 2
6645: PUSH
6646: DOUBLE
6647: LD_INT 1
6649: DEC
6650: ST_TO_ADDR
6651: LD_EXP 40
6655: PUSH
6656: FOR_TO
6657: IFFALSE 6853
// begin for j = 1 to vx_list [ i ] [ 2 ] do
6659: LD_ADDR_VAR 0 3
6663: PUSH
6664: DOUBLE
6665: LD_INT 1
6667: DEC
6668: ST_TO_ADDR
6669: LD_EXP 40
6673: PUSH
6674: LD_VAR 0 2
6678: ARRAY
6679: PUSH
6680: LD_INT 2
6682: ARRAY
6683: PUSH
6684: FOR_TO
6685: IFFALSE 6849
// if un = vx_list [ i ] [ 2 ] [ j ] [ 1 ] then
6687: LD_VAR 0 1
6691: PUSH
6692: LD_EXP 40
6696: PUSH
6697: LD_VAR 0 2
6701: ARRAY
6702: PUSH
6703: LD_INT 2
6705: ARRAY
6706: PUSH
6707: LD_VAR 0 3
6711: ARRAY
6712: PUSH
6713: LD_INT 1
6715: ARRAY
6716: EQUAL
6717: IFFALSE 6847
// begin tmp := vx_list [ i ] [ 1 ] ;
6719: LD_ADDR_VAR 0 4
6723: PUSH
6724: LD_EXP 40
6728: PUSH
6729: LD_VAR 0 2
6733: ARRAY
6734: PUSH
6735: LD_INT 1
6737: ARRAY
6738: ST_TO_ADDR
// t := Delete ( vx_list [ i ] [ 2 ] , j ) ;
6739: LD_ADDR_VAR 0 5
6743: PUSH
6744: LD_EXP 40
6748: PUSH
6749: LD_VAR 0 2
6753: ARRAY
6754: PUSH
6755: LD_INT 2
6757: ARRAY
6758: PPUSH
6759: LD_VAR 0 3
6763: PPUSH
6764: CALL_OW 3
6768: ST_TO_ADDR
// t2 := Replace ( vx_list [ i ] , 2 , t ) ;
6769: LD_ADDR_VAR 0 6
6773: PUSH
6774: LD_EXP 40
6778: PUSH
6779: LD_VAR 0 2
6783: ARRAY
6784: PPUSH
6785: LD_INT 2
6787: PPUSH
6788: LD_VAR 0 5
6792: PPUSH
6793: CALL_OW 1
6797: ST_TO_ADDR
// vx_list := Replace ( vx_list , i , t2 ) ;
6798: LD_ADDR_EXP 40
6802: PUSH
6803: LD_EXP 40
6807: PPUSH
6808: LD_VAR 0 2
6812: PPUSH
6813: LD_VAR 0 6
6817: PPUSH
6818: CALL_OW 1
6822: ST_TO_ADDR
// ChangeCapture ( tmp , - 1 ) ;
6823: LD_VAR 0 4
6827: PPUSH
6828: LD_INT 1
6830: NEG
6831: PPUSH
6832: CALL 5631 0 2
// DisplayHacks ( tmp ) ;
6836: LD_VAR 0 4
6840: PPUSH
6841: CALL 5757 0 1
// break ;
6845: GO 6849
// end ;
6847: GO 6684
6849: POP
6850: POP
// end ;
6851: GO 6656
6853: POP
6854: POP
// end ; end ;
6855: PPOPN 6
6857: END
// every 0 0$01 do var c , list , un ;
6858: GO 6860
6860: DISABLE
6861: LD_INT 0
6863: PPUSH
6864: PPUSH
6865: PPUSH
// begin list = FilterAllUnits ( [ [ f_weapon , 98 ] ] ) ;
6866: LD_ADDR_VAR 0 2
6870: PUSH
6871: LD_INT 34
6873: PUSH
6874: LD_INT 98
6876: PUSH
6877: EMPTY
6878: LIST
6879: LIST
6880: PUSH
6881: EMPTY
6882: LIST
6883: PPUSH
6884: CALL_OW 69
6888: ST_TO_ADDR
// enable ;
6889: ENABLE
// for un in list do
6890: LD_ADDR_VAR 0 3
6894: PUSH
6895: LD_VAR 0 2
6899: PUSH
6900: FOR_IN
6901: IFFALSE 6964
// begin c = WantsToAttack ( un ) ;
6903: LD_ADDR_VAR 0 1
6907: PUSH
6908: LD_VAR 0 3
6912: PPUSH
6913: CALL_OW 319
6917: ST_TO_ADDR
// if UnitShoot ( c ) = un then
6918: LD_VAR 0 1
6922: PPUSH
6923: CALL_OW 504
6927: PUSH
6928: LD_VAR 0 3
6932: EQUAL
6933: IFFALSE 6962
// ArtContamination ( GetX ( c ) , GetY ( c ) , 1 ) ;
6935: LD_VAR 0 1
6939: PPUSH
6940: CALL_OW 250
6944: PPUSH
6945: LD_VAR 0 1
6949: PPUSH
6950: CALL_OW 251
6954: PPUSH
6955: LD_INT 1
6957: PPUSH
6958: CALL_OW 495
// end ;
6962: GO 6900
6964: POP
6965: POP
// end ;
6966: PPOPN 3
6968: END
